使用相同 log4j.properties 的多个进程

Multiple process using the same log4j.properties

我实际上正在使用 slf4j/log4j 进行一个项目。 为此,我们使用 log4j.properties 文件来配置日志记录,尤其是 DailyRollingFileAppender。

# Root logger option
log4j.rootLogger=INFO, file, stdout

log4j.logger.com.thales.ecosystem=DEBUG,stdout,file
log4j.additivity.com.thales.ecosystem=false

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
# this is set dynamically
log4j.appender.file.File=${log.basedir}/decoders/nm-flight-decoder.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.ImmediateFlush=true
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} v${release.version} %-5p %c{1}:%L - %m%n
log4j.appender.file.Append=true

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

在代码中,我们使用 loggerFactory:

private static final Logger LOGGER = LoggerFactory.getLogger(xxxxxxxx.class);

但我们现在必须处理多个(但数量有限)相同的进程。 所以问题是:我们怎样才能有两个进程(具有相同的 class) 每个 class 只有一个 log4j.properties,每个都写入一个文件,并保留 DailyRollingFileAppender ? 谢谢!

将配置中的文件名设为 属性,并使用该 属性 的不同值启动每个进程。

log4j.appender.file.File=${log.basedir}/decoders/${proc}.log

-Dproc=nm-flight-decoder 启动一个进程,用不同的值启动另一个进程。

(另外,考虑升级到 Log4j2。Log4j 1.2 has been End of Life since summer 2015 (archived here) and is known to be broken on Java 9 (archived here)。)