【问题标题】:Log4j and many rollingfileappendersLog4j 和许多 rollingfileappenders
【发布时间】:2025-12-14 07:10:01
【问题描述】:

我有一个使用多个 log4j 2.11 DailyRollingFileAppenders 的项目。本质上,每个客户端进程都有自己的附加程序。多年来它一直运行良好,但现在我在配置中添加了一些附加程序,它不尊重最新的附加程序,并且日志数据被转储到根附加程序中。

我已经比较了 appender 配置中的有效配置和新配置,我并没有在它们之间搞砸任何东西(比如忘记了一些东西)。

您可以拥有的数量似乎是有限的,但我似乎无法找到这种情况。您可以拥有的活动附加程序的数量是否有限制?可以调整吗?

这是配置的一个片段 - 但想象一下其中有 28 个 RollingFileAppender:

# Define the root logger with appender file
log4j.rootLogger = INFO, CON, queue

# Define the file appender
log4j.appender.queue=org.apache.log4j.RollingFileAppender
log4j.appender.queue.File=log/QueueListener.log
log4j.appender.queue.MaxFileSize=2MB
log4j.appender.queue.MaxBackupIndex=5

# Define the layout for file appender
log4j.appender.queue.layout=org.apache.log4j.PatternLayout
log4j.appender.queue.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %C{1}:%L - %m%n

# Direct log messages to CON
log4j.appender.CON=org.apache.log4j.ConsoleAppender
log4j.appender.CON.Target=System.out
log4j.appender.CON.layout=org.apache.log4j.PatternLayout
log4j.appender.CON.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %C{1}:%L - %m%n

# demo Appender
log4j.appender.demo=org.apache.log4j.DailyRollingFileAppender
log4j.appender.demo.DatePattern='.'yyyy-MM-dd
log4j.appender.demo.File=log/demo/demo.log
log4j.appender.demo.layout=org.apache.log4j.PatternLayout
log4j.appender.demo.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %C{1}:%L - %m%n
log4j.category.demo=INFO, CON, demo
log4j.additivity.demo=false

# client_1 Appender
log4j.appender.client_1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.client_1.DatePattern='.'yyyy-MM-dd
log4j.appender.client_1.File=log/client_1/client_1.log
log4j.appender.client_1.layout=org.apache.log4j.PatternLayout
log4j.appender.client_1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %C{1}:%L - %m%n
log4j.category.client_1=INFO, CON, client_1
log4j.additivity.client_1=false

我在路由定义中也看到了附加程序,但我以前没有这样做过。

【问题讨论】:

    标签: log4j rollingfileappender


    【解决方案1】:

    我相信您需要在log4j.rootLogger 中添加附加程序别名。因此,根据您的配置片段。你应该有:

    log4j.rootLogger = INFO, CON, queue, demo, client_1
    

    【讨论】:

    • 感谢 jpllosa,这似乎对它的一部分起作用。我现在确实看到其他附加程序中出现了一些根记录器片段。我知道我可能有一些与特定附加程序无关的东西,看起来这些项目在每个人的日志中,而不仅仅是在根记录器中。