我想记录我的 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
时它可以工作,但正如我所说,它也正在调试休眠和弹簧。
是的,您必须指定每个包的日志级别:
log4j.logger.org.hibernate=info
log4j.logger.org.springframework=info
log4j.logger.com.yourapplication=debug
请注意,您应该从类别(已过时)切换到记录器。所以
log4j.rootLogger=...
您需要知道实际正在编写内容的记录器的名称...最简单的方法是将根类别设置为错误:
log4j.rootCategory=ERROR, 0
然后相应地设置日志级别:
log4j.com.your.package=DEBUG...
将
rootCategory
设置为 DEBUG
会将 everything 变为 DEBUG
,除非您专门配置了记录器。
顺便说一句,这不是休眠问题,这与您配置记录器的方式有关。
您需要将 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”的调试输出仍将通过。