如何在log4j中启用logger.debug()

bd1hkmkf  于 2021-06-30  发布在  Java
关注(0)|答案(8)|浏览(309)

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

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.属性

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
sy5wg1nm

sy5wg1nm1#

这可能是因为您的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 在这里使用 CONSOLE 追加器。
请注意,一些附加程序(如控制台附加程序)也具有 Threshold 可用于否决 rootLoggers 水平。在这种情况下,你需要两者都检查一下。

carvr3hs

carvr3hs2#

如果您来这里是因为您正在使用带有log4j的apachecommons日志记录,并且log4j没有按预期工作,那么请检查您的运行时类路径中是否有log4j.jar。那件事让我困惑了一会儿。现在,我已经在dev环境中配置了runner,将-dlog4j.debug包含在java命令行中,这样就可以始终看到log4j被正确初始化

pbpqsu0x

pbpqsu0x3#

我喜欢使用滚动文件追加器将日志信息写入文件。我的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
mitkmikd

mitkmikd4#

发生这种情况是因为记录器的日志记录级别设置为“error”,因此您只能看到错误消息或严重程度高于此级别的消息,因此您也会看到“fatal”消息。
如果在log4j.xml中的日志记录器上将日志级别设置为“debug”,则应该可以看到所有消息。
请看一下log4j的介绍以获得解释。

lvmkulzt

lvmkulzt5#

您可能在项目的某个地方有一个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会被打印到控制台(控制台是在稍低的位置定义的附加器)。
最后一行设置com.example.*的记录器(如果您通过 LogFactory.getLogger(getClass()) )将处于调试级别,即也将打印调试。

quhf5bfb

quhf5bfb6#

您需要将记录器级别设置为要显示的最低级别。例如,如果要显示调试消息,则需要将记录器级别设置为debug。
apachelog4j手册中有一节是关于配置的。

fcipmucu

fcipmucu7#

放置一个名为 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>
py49o6xq

py49o6xq8#

下面是我偶尔用来在junit测试中临时打开log4j调试日志记录的一个简单的单行代码:

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

或者,如果要避免添加导入:

org.apache.log4j.Logger.getRootLogger().setLevel(
      org.apache.log4j.Level.DEBUG);

注意:这个hack在log4j2中不起作用,因为 setLevel 已从api中删除,并且似乎没有等效的功能。

相关问题