如何在Log4j中启用Logger.debug()

时间:2009-11-04 12:26:47

标签: java log4j

在尝试执行以下行时,只显示最后两个语句(“这里有一些错误”和“这里有一些致命”)并且前三个语句没有显示。我刚刚开始学习这个主题,任何人都可以告诉为什么会发生这种情况?

    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

8 个答案:

答案 0 :(得分:59)

您可能在项目的某处有一个log4j.properties文件。在该文件中,您可以配置所需的调试输出级别。见这个例子:

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

第一行将根记录器的日志级别设置为“info”,即只有info,warn,error和fatal将打印到控制台(这是在下面定义的appender)。

最后一行设置com.example的记录器。*(如果通过LogFactory.getLogger(getClass())获得记录器)将处于调试级别,即也将打印调试。

答案 1 :(得分:51)

这是一个快速的单行黑客,我偶尔会用它来暂时打开JUnit测试中的调试日志记录:

Logger.getRootLogger().setLevel(Level.DEBUG);

答案 2 :(得分:9)

将名为log4j.xml的文件放入类路径中。内容是例如。

<?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>

答案 3 :(得分:6)

这可能是因为您的log4j配置设置为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

rootLogger使用ERROR appender设置为CONSOLE级别。

请注意,某些appender(如控制台appender)也具有Threshold属性,可用于取代rootLoggers级别。在这种情况下你需要检查两者。

答案 4 :(得分:5)

如果你来这里是因为你使用Apache commons登录log4j并且log4j没有按预期工作,那么检查你的运行时类路径中是否确实有一个log4j.jar。那个让我困惑了一会儿。我现在在我的开发环境中配置了运行器,在Java命令行中包含 -Dlog4j.debug ,这样我总能看到Log4j正在被正确初始化

答案 5 :(得分:3)

您需要将记录器级别设置为要显示的最低级别。例如,如果要显示DEBUG消息,则需要将记录器级别设置为DEBUG。

Apache log4j manual有一个关于配置的部分。

答案 6 :(得分:3)

我喜欢使用滚动文件appender将日志信息写入文件。我的log4j属性文件通常看起来像这样。我更喜欢这种方式,因为我喜欢制作特定于包的日志记录,以防我需要不同程度的日志记录。示例中只提到了一个包。

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

答案 7 :(得分:2)

这是因为记录器的日志记录级别设置为“错误” - 因此您只会在严重性方面看到错误消息或高于此级别,因此这也是您看到'致命'的原因消息。

如果在log4j.xml中将记录器的日志记录级别设置为“debug”,则应该看到所有消息。

查看log4j解释说明。