仅为特定流将日志写入不同的文件
Writing logs to a different file only for a particular flow
我需要为特定的代码流写入不同的日志文件。此流程不限于单个包,还使用其他 classes 也引用的实用程序 classes。
# 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 class
中这样做,但所有内容都会记录在两个日志中
private static Logger customLogger= Logger.getLogger("custom");
我的情况是,我需要在该代码流中随时写入该 customLogger。此流程不限单包。
函数getLogger(String name)
实际上将记录器与您作为参数传递的字符串捆绑在一起。此方法通常与 class 名称一起使用,因此您可以检索使用您的 class 名称配置的附加程序。
如果您没有在 log4j.properties
中指定任何内容,这是您的情况,那么它会使用配置了两个附加程序的 rootLogger,因此它会记录两次。
解决这个问题的方法是声明一个具有自定义名称的记录器,然后获取名称为 "sim" 的记录器,并将其与您的 sim appender 捆绑在一起。
将以下内容添加到您的 log4j.properties
中,它将起作用:
log4j.logger.sim=INFO, sim
log4j.additivity.sim=false
但是我不推荐这种处理日志记录的方式,因为当您的 classes 开始使用多个记录器时,它会变得非常复杂。
我需要为特定的代码流写入不同的日志文件。此流程不限于单个包,还使用其他 classes 也引用的实用程序 classes。
# 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 class
中这样做,但所有内容都会记录在两个日志中private static Logger customLogger= Logger.getLogger("custom");
我的情况是,我需要在该代码流中随时写入该 customLogger。此流程不限单包。
函数getLogger(String name)
实际上将记录器与您作为参数传递的字符串捆绑在一起。此方法通常与 class 名称一起使用,因此您可以检索使用您的 class 名称配置的附加程序。
如果您没有在 log4j.properties
中指定任何内容,这是您的情况,那么它会使用配置了两个附加程序的 rootLogger,因此它会记录两次。
解决这个问题的方法是声明一个具有自定义名称的记录器,然后获取名称为 "sim" 的记录器,并将其与您的 sim appender 捆绑在一起。
将以下内容添加到您的 log4j.properties
中,它将起作用:
log4j.logger.sim=INFO, sim
log4j.additivity.sim=false
但是我不推荐这种处理日志记录的方式,因为当您的 classes 开始使用多个记录器时,它会变得非常复杂。