Log4j RollingFileAppender 写入先前滚动的文件

问题描述 投票:0回答:1

我正在使用 log4j 2.17.1。

Log4j 每天都会滚动文件,但有时会写入已经滚动的文件。在某些情况下,它会回溯几天。

示例:

  • app.log.2022-01-03
    已被 2022 年 1 月 4 日的数据覆盖。
  • app.log.2022-01-04
    已被 2022 年 1 月 10 日的数据覆盖。
  • app.log.2022-01-11
    已被 2022 年 1 月 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>
log4j
1个回答
2
投票

我相信我的问题是由多个 LoggerContext 尝试写入同一个 RollingFileAppender 引起的。

我按照Log4j Web应用程序使用中的步骤解决了这个问题:

https://logging.apache.org/log4j/2.x/manual/webapp.html

我将多个 Web 应用程序部署到单个 JBoss 实例。每个应用程序都有自己的 log4j jar 副本。我将 log4j jar 从战争中移出并放入 JBoss 模块中,以将它们放入服务器类加载器中。

然后我按照“记录分离”页面上的说明进行操作:

https://logging.apache.org/log4j/2.x/manual/logsep.html

我为 JBoss 配置了一个 LoggerContext:

将日志记录 jar 放在容器的类路径中,并将系统属性 log4j2.contextSelector 设置为 org.apache.logging.log4j.core.selector.BasicContextSelector。这将使用单个配置创建一个 LoggerContext,该配置将在所有应用程序之间共享。

© www.soinside.com 2019 - 2024. All rights reserved.