如何在Log4j中启用Logger.debug()
当试图执行下面的行时,只显示最后两条语句(“这是一些错误”和“这是一些致命错误”),前三条语句不显示。我刚开始学习这个主题,谁能告诉为什么会这样呢?
logger.debug("Here is some DEBUG"); logger.info("Here is some INFO"); logger.warn("Here is some WARN"); logger.error("Here is some ERROR"); logger.fatal("Here is some FATAL");
log4j.property有
log4j.rootLogger=debug,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%5p] %d{mm:ss}(%F:%M:%L)%n%m%n%n
您可能在项目中某个地方有一个log4j.properties文件。 在该文件中,您可以configuration您想要的debugging输出的级别。 看到这个例子:
log4j.rootLogger=info, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n log4j.logger.com.example=debug
第一行将根logging器的日志级别设置为“信息”,即只有信息,警告,错误和致命打印将被打印到控制台(这是稍微定义的appender)。
最后一行将logging器设置为com.example。*(如果通过LogFactory.getLogger(getClass())
获取logging器)将处于debugging级别,即打印debugging。
下面是一个简单的单行破解,我偶尔用它来暂时打开JUnittesting中的debugging日志logging:
Logger.getRootLogger().setLevel(Level.DEBUG);
把一个名为log4j.xml
的文件放到你的classpath中。 内容是例如
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="stdout" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %t %c{1}:%L - %m%n"/> </layout> </appender> <root> <level value="debug"/> <appender-ref ref="stdout"/> </root> </log4j:configuration>
这可能是因为您的log4jconfiguration设置为ERROR
。 查找包含如下内容的log4j.properties文件:
log4j.rootLogger=ERROR, CONSOLE # console logging log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Threshold=DEBUG log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %-20.20t %-24c{1}: %m%n
在这里使用CONSOLE
appender将rootLogger
设置为ERROR
级别。
请注意,一些appender(如控制台appender)也有一个Threshold
属性,可以用来rootLoggers
级别。 在这种情况下你需要检查两者。
我喜欢使用滚动文件appender将日志信息写入文件。 我的log4j属性文件通常看起来像这样。 我更喜欢这种方式,因为我喜欢打包特定的日志logging,以防我需要不同程度的日志logging不同的包。 在这个例子中只提到了一个包。
log4j.appender.RCS=org.apache.log4j.DailyRollingFileAppender log4j.appender.RCS.File.DateFormat='.'yyyy-ww #define output location log4j.appender.RCS.File=C:temp/logs/MyService.log #define the file layout log4j.appender.RCS.layout=org.apache.log4j.PatternLayout log4j.appender.RCS.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm a} %5 %c{1}: Line#%L - %m%n log4j.rootLogger=warn #Define package specific logging log4j.logger.MyService=debug, RCS
您需要将logging器级别设置为您要显示的最低级别。 例如,如果要显示DEBUG消息,则需要将logging器级别设置为DEBUG。
Apache log4j手册中有关于configuration的一节。
发生这种情况的原因是logging器的日志级别设置为“错误”,因此只能看到错误消息或严重级别高于此级别的数据,因此这就是为什么您还会看到“致命”消息的原因。
如果在log4j.xml中将日志logging级别设置为“debugging”,则应该看到所有消息。
看看log4j的介绍来解释。
如果你来这里是因为你正在使用Apache公共日志logginglog4j,而log4j不能像你期望的那样工作,那么检查你的运行时类path中是否真的有log4j.jar。 那一个让我感到困惑了一会儿。 我现在已经在我的开发环境中configuration了runner,在Java命令行中包含了-Dlog4j.debug ,这样我就可以看到Log4j正在初始化