我的行为越来越奇怪。无法捕获特定记录器的调试模式。
这是我的属性文件
logfile=C:/Softwares/logFiles
log4j.rootLogger=ERROR, generalDebug, generalError
log4j.appender.generalDebug=org.apache.log4j.RollingFileAppender
log4j.appender.generalDebug.File=${logfile}/debug.log
log4j.appender.generalDebug.MaxFileSize=10MB
log4j.appender.generalDebug.MaxBackupIndex=10
log4j.appender.generalDebug.layout=org.apache.log4j.PatternLayout
log4j.appender.generalDebug.layout.ConversionPattern=[%-5p] %d{ISO8601}|%r %C|%L|%x - %m%n
log4j.appender.generalDebug.Threshold=DEBUG
log4j.appender.generalError=org.apache.log4j.RollingFileAppender
log4j.appender.generalError.File=${logfile}/error.log
log4j.appender.generalError.MaxFileSize=10MB
log4j.appender.generalError.MaxBackupIndex=10
log4j.appender.generalError.layout=org.apache.log4j.PatternLayout
log4j.appender.generalError.layout.ConversionPattern=[%-5p] %d{ISO8601}|%r %C|%L|%x - %m%n
log4j.appender.generalError.Threshold=ERROR
#######################################################################
log4j.logger.JavaTest=ERROR, HipDebug, HipError
log4j.additivity.JavaTest=true
log4j.appender.HipDebug=org.apache.log4j.RollingFileAppender
log4j.appender.HipDebug.File=${logfile}/HipDebug.log
log4j.appender.HipDebug.MaxFileSize=10MB
log4j.appender.HipDebug.MaxBackupIndex=10
log4j.appender.HipDebug.layout=org.apache.log4j.PatternLayout
log4j.appender.HipDebug.layout.ConversionPattern=[%-5p] %d{ISO8601}|%r %C|%L|%x - %m%n
log4j.appender.HipDebug.Threshold=DEBUG
log4j.appender.HipError=org.apache.log4j.RollingFileAppender
log4j.appender.HipError.File=${logfile}/HipError.log
log4j.appender.HipError.MaxFileSize=10MB
log4j.appender.HipError.MaxBackupIndex=10
log4j.appender.HipError.layout=org.apache.log4j.PatternLayout
log4j.appender.HipError.layout.ConversionPattern=[%-5p] %d{ISO8601}|%r %C|%L|%x - %m%n
log4j.appender.HipError.Threshold=ERROR
在Project的程序包名称JavaTest
中,我在以下代码段中使用的位置
获取日志。
PropertyConfigurator.configure("C:\\Softwares\\ConfigFiles\\log4j.properties");
Logger logger = Logger.getLogger(TestClass.class);
logger.log(TestClass.class.getCanonicalName(), Level.DEBUG, "I'm Writing for DEBUG Mode", null);
我想在运行DEBUG
模式时,它应该只写在HipDebug.log
文件中。但是,如果我使用ERROR
模式,则不会写入任何文件。 (应该只写在HipError.log
文件中)
第二,当我使用ERROR
时,它将写入所有四个文件。 (debug.error, error.log, HipDebug.log, HipError.log
)为什么会这样?
何时以及如何仅写入rootLogger文件? (error.log and debug.log files only
)
有人可以建议吗?
谢谢
答案 0 :(得分:0)
当我尝试重新创建您正在执行的操作时,我确实看到未写入日志,但这是在使用DEBUG级别生成日志事件而不是ERROR时发生的。我已经修改了下面引用的问题以反映这一点。
...如果我使用[DEBUG]模式,则不会以任何方式写入 文件。
这里的问题是您的记录器设置为ERROR模式,这意味着它们将仅接受ERROR或FATAL级别的事件。记录消息之前,记录器和附加程序必须接受事件。
第二,当我使用ERROR时,它将写入所有四个文件。 (debug.error, error.log,HipDebug.log,HipError.log)。为什么会这样?
您有log4j.additivity.JavaTest=true
,这意味着JavaTest
记录器接受的任何事件都将发送到其记录器及其父记录器的附加器(除非其中一个记录器通过将加性设置为false来打破链条)
此外,由于您拥有log4j.appender.generalDebug.Threshold=DEBUG
和log4j.appender.HipDebug.Threshold=DEBUG
,因此这些附加程序将接受级别DEBUG,INFO,WARN,ERROR和FATAL的事件。
何时以及如何仅写入rootLogger文件? (error.log和 仅限debug.log文件)
我不确定您要问的是什么,但是您可以通过获取根记录器并在其上调用适当的方法来将事件发送到根记录器的附加程序。
最后一个想法-如果可能的话,您应该迁移到log4j2,因为它在log4j1的基础上提供了许多改进,并且log4j1已到使用寿命。