如何使log4j仅按需创建日志文件?

Mir*_*ith 10 log4j

我们有一个模块化应用程序,其中模块有自己的log4j日志(即通信日志和错误日志).这些的appender和类别都在核心log4j XML中配置,但并非总是安装所有模块.DailyRollingFileAppender无论使用什么都会创建其文件,虽然不存在,但它会公开完整的模块集,并且由于其中一些模块是客户特定的,我们希望隐藏未使用的日志.是否有办法让DailyRollingFileAppender在首次使用时创建其文件而不是在启动时自动创建?

ale*_*oot 6

我有同样的问题,所以我扩展了标准的FileAppender类,我创建了一个新的LazyFileAppender,它是一个懒惰地初始化日志文件的FileAppender(仅在第一次写入操作发生时才创建它).

LazyFileAppender和其他一些东西加入到标准的log4j库可以发现到,我已经创建了一个简单的库:log4j的-增加.

您可以查看源代码以开发自己的扩展,也可以按原样使用它...


Sac*_*dra 6

在 Log4j 2 中,FileAppender 和 RollingFileAppender 都有参数“createOnDemand”,可用于配置仅当日志事件传递到附加程序时才创建日志文件。

例子:

<RollingFile name="LogFile" fileName="test.log" filePattern="test-%i.log.gz" createOnDemand="true">
    <Policies>
        <SizeBasedTriggeringPolicy size="1MB"/>
    </Policies>
    <DefaultRolloverStrategy max="5"/>
</RollingFile>
Run Code Online (Sandbox Code Playgroud)

更多详细信息请参见:https://logging.apache.org/log4j/2.x/manual/appenders.html#RollingRandomAccessFileAppender


And*_*ndy 4

文件附加程序没有延迟创建日志文件的选项 -setFile如果文件尚不存在,该方法会自动创建该文件:ostream = new FileOutputStream(fileName, append);

您必须自己扩展附加程序并覆盖文件初始化代码才能获得您想要的行为。