仅针对特定流程将日志写入不同的文件

时间:2019-02-12 10:32:39

标签: java logging log4j

对于特定的代码流,我需要写入其他日志文件。此流程不限于单个软件包,还使用其他类也引用的实用工具类。

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

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=../log/main.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=30
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


#log messages to a log file
log4j.appender.sim=org.apache.log4j.RollingFileAppender
log4j.appender.sim.File=../log/custom.log
log4j.appender.sim.MaxFileSize=10MB
log4j.appender.sim.MaxBackupIndex=30
log4j.appender.sim.layout=org.apache.log4j.PatternLayout
log4j.appender.sim.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

尽管我在Java类中进行了此操作,但一切都已记录在两个日志中

private static Logger customLogger= Logger.getLogger("custom");

我的情况是,每当我需要该代码流时,都需要写该customLogger。此流程不限于单个软件包。

1 个答案:

答案 0 :(得分:1)

函数getLogger(String name)实际上使记录器与您作为参数传递的字符串捆绑在一起。此方法通常与类名一起使用,因此您可以检索使用您的类名配置的追加程序。

如果您在log4j.properties中没有指定任何情况,那么它将使用rootLogger和,同时配置了两个附加程序,因此记录两次。

解决此问题的方法是,声明一个具有自定义名称的记录器,然后获取名称为“ sim”的记录器,并将其与您的sim附加器捆绑在一起。

在您的log4j.properties后面添加以下内容,它将起作用:

log4j.logger.sim=INFO, sim
log4j.additivity.sim=false

但是,我不建议您使用这种处理日志的方式,因为当您的类开始使用多个记录器时,这种推理可能非常复杂。