我使用的是log4j 2.17.1。
Log4j每天滚动文件,但有时会写入已滚动的文件。在某些情况下,它会返回几天。
示例:
- app.log.2022-01-03已被2022-01-04的数据覆盖。
- app.log.2022-01-04已被2022-01-10的数据覆盖。
- app.log.2022-01-11已被2022-01-17的数据覆盖。
我这里的配置有什么问题吗?我只想让它每天滚动。
<Configuration>
<Appenders>
<RollingFile name="A1" append="true" fileName="/var/log/app/app.log">
<PatternLayout
pattern="%d{yyyy-MM-dd hh:mm:ss} [%t] %-5p %c %x %m%n" />
<FilePattern>/var/log/app/app.log.%d{yyyy-MM-dd}</FilePattern>
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="A1" />
</Root>
</Loggers>
</Configuration>
1条答案
按热度按时间sigwle7e1#
我认为我的问题是由于多个LoggerContext试图写入同一个RollingFileAppender而引起的。
我按照Log4j Web应用程序用法中的步骤解决了此问题:
https://logging.apache.org/log4j/2.x/manual/webapp.html
我将几个Web应用程序部署到一个JBoss示例中,每个应用程序都有自己的log4j jar副本,我将log4j jar从Wars中移到一个JBoss模块中,以便将它们放到服务器类加载器中。
然后,我按照“测井分离”页面上的说明进行操作:
https://logging.apache.org/log4j/2.x/manual/logsep.html
并且我为JBoss配置了一个LoggerContext:
将日志记录jar放在容器的类路径中,并将系统属性log4j2.contextSelector设置为org.apache.logging.log4j.core.selector.BasicContextSelector。这将使用一个配置创建一个LoggerContext,该配置将在所有应用程序之间共享。