仅指定某些包有调试输出

问题描述 投票:0回答:3

我想记录我的 Web 应用程序的一些行为,该应用程序也实现了 hibernate、spring 等。当我尝试从 apache 实现 log4j 记录器时,我遇到了一些麻烦。

当我打开记录器时,它也在调试我不想要的休眠和弹簧。我尝试配置属性文件来指定我的项目的包,但它不起作用。

这是我的属性文件代码:

log4j.rootCategory=ERROR, O
log4j.category.com.my.package= DEBUG, FILE, O
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=log/logger.log
log4j.appender.O=org.apache.log4j.ConsoleAppender
.... and some layout

当我切换

rootCategory = DEBUG
时它可以工作,但正如我所说,它也正在调试休眠和弹簧。

java log4j
3个回答
12
投票

是的,您必须指定每个包的日志级别:

log4j.logger.org.hibernate=info
log4j.logger.org.springframework=info
log4j.logger.com.yourapplication=debug

请注意,您应该从类别(已过时)切换到记录器。所以

log4j.rootLogger=...


3
投票

您需要知道实际正在编写内容的记录器的名称...最简单的方法是将根类别设置为错误:

log4j.rootCategory=ERROR, 0

然后相应地设置日志级别:

log4j.com.your.package=DEBUG...

rootCategory
设置为
DEBUG
会将 everything 变为
DEBUG
,除非您专门配置了记录器。

顺便说一句,这不是休眠问题,这与您配置记录器的方式有关。


0
投票

您需要将 additivity=false 设置为您的包特定记录器以覆盖 INFO 的根阈值级别。

我不知道如何使用属性符号来做到这一点。 我知道只能使用XML配置形式。 我强烈建议使用 XML 格式。

那么让我们切换到 XML。您的配置大致相当于此 XML(省略 FILE 附加程序):

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" ...>

    <logger name="com.my.package">
        <level value="debug"/>
    </logger>

    <root>
        <priority value="info"/>
        <appender-ref ref="console"/>
    </root>
</log4j:configuration>

现在让我们将 additivity=false 设置为“com.my.package”记录器。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" ...>

    <logger name="com.my.package" additivity="false">
        <level value="debug"/>
    </logger>

    <root>
        <priority value="info"/>
        <appender-ref ref="console"/>
    </root>
</log4j:configuration>

尽管根级别设置为 INFO,“com.my.package”的调试输出仍将通过。

© www.soinside.com 2019 - 2024. All rights reserved.