6

log4j 的一个恼人的事情是它总是想把东西转储到屏幕上。如果我登录到文件,我不需要它。我确定这与我设置 log4j.properties 文件的方式有关。解决所有这些配置问题令人沮丧!:-)

对于我当前调用 Balancer 的程序,这就是我进行记录器初始化的方式。也许它是错误的或什么的。

static Logger log = Logger.getLogger(Balancer.class);

我的 log4j.properties 的部分转储:

log4j.rootLogger=fatal, stdout
log4j.logger.Balancer=fatal, rollingLog

# I still don't understand how category stuff works yet
log4j.category.Balancer=info, BalancerLog

#### First appender writes to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d [%t] (%F:%L) - %m%n

#### Second appender writes to a file
# Control the maximum log file size
# Archive log files (ten backups here)
log4j.appender.rollingLog=org.apache.log4j.RollingFileAppender
log4j.appender.rollingLog.File=default.log
log4j.appender.rollingLog.MaxFileSize=10000KB
log4j.appender.rollingLog.MaxBackupIndex=10
log4j.appender.rollingLog.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingLog.layout.ConversionPattern=%5p %d [%t] (%F:%L) - %m%n

log4j.appender.BalancerLog=org.apache.log4j.RollingFileAppender
log4j.appender.BalancerLog.File=Balancer.log
log4j.appender.BalancerLog.MaxFileSize=100000KB
log4j.appender.BalancerLog.MaxBackupIndex=10
log4j.appender.BalancerLog.layout=org.apache.log4j.PatternLayout
log4j.appender.BalancerLog.layout.ConversionPattern=%5p %d [%t] (%F:%L) - %m%n

我知道 rootLogger 如何将内容发送到 stdout appender。是否有 /dev/null 附加程序?您必须至少有一个附加程序。

无论如何,如果不出意外,我现在的基本解决方法是将屏幕输出发送到 /dev/null。顺便说一句,我的 Java 程序在预定的批处理环境(无 GUI)中运行。必须清理假脱机文件(是的,这是在 AS/400 上)有点痛苦,尽管这也可以自动化。

4

1 回答 1

8

是否有 /dev/null 附加程序?

是的。

log4j.appender.devnull=org.apache.log4j.varia.NullAppender
log4j.rootLogger=fatal, devnull

我不确定你从哪里得到log4j.category.*的,但这不是我以前见过的东西,我会坚持只使用appenderand logger

log4j.logger.Balancer=fatal, rollingLog, BalancerLog

会将fatal名为Balancer(没有包前缀)的记录器的级别消息发送到 rollingLog 和 BalancerLog 附加程序。如果将记录器级别更改为info

log4j.logger.Balancer=info, rollingLog, BalancerLog

然后它将info向两个附加程序发送级别及以上的消息。您不能限制它以使 BalancerLog 获取info及更高版本,但 rollingLog 仅基于每个记录器fatal获取消息,但您可以在 rollingLog 附加器上设置阈值,以便它仅记录消息(无论它们来自哪个记录器)fatal

log4j.appender.rollingLog=org.apache.log4j.RollingFileAppender
log4j.appender.rollingLog.Threshold=fatal
log4j.appender.rollingLog.File=default.log
# other parameters as before
于 2012-08-06T17:01:07.847 回答