对于特定的代码流,我需要写入其他日志文件。此流程不限于单个软件包,还使用其他类也引用的实用工具类。
# 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。此流程不限于单个软件包。
答案 0 :(得分:1)
函数getLogger(String name)
实际上使记录器与您作为参数传递的字符串捆绑在一起。此方法通常与类名一起使用,因此您可以检索使用您的类名配置的追加程序。
如果您在log4j.properties
中没有指定任何情况,那么它将使用rootLogger和,同时配置了两个附加程序,因此记录两次。
解决此问题的方法是,声明一个具有自定义名称的记录器,然后获取名称为“ sim”的记录器,并将其与您的sim附加器捆绑在一起。
在您的log4j.properties
后面添加以下内容,它将起作用:
log4j.logger.sim=INFO, sim
log4j.additivity.sim=false
但是,我不建议您使用这种处理日志的方式,因为当您的类开始使用多个记录器时,这种推理可能非常复杂。