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