【发布时间】:2010-08-25 19:13:11
【问题描述】:
如何过滤来自外部第三方框架的日志消息?我正在使用 Hibernate 和 Spring 框架,我想抑制日志,以便只显示我的 log4j 日志。
【问题讨论】:
标签: java hibernate spring log4j
如何过滤来自外部第三方框架的日志消息?我正在使用 Hibernate 和 Spring 框架,我想抑制日志,以便只显示我的 log4j 日志。
【问题讨论】:
标签: java hibernate spring log4j
在我的 log4j.properties 文件中,我将根 logger 日志记录级别设置为 ERROR。然后对于我特别想记录的包,比如我的应用程序代码,我将记录级别设置为 INFO 或 DEBUG。
log4j.rootLogger=ERROR, stdout
log4j.logger.com.initech.tps=DEBUG
log4j.logger.org.hibernate.SQL=INFO
我看到同事将 root 日志设置为低,然后最终列出他们不想看到的所有内容,这对我来说似乎倒退了。我宁愿列出我想要记录的内容,也不愿列出我不想记录的所有内容。
顺便说一句,完全关闭第三方组件的注销对我来说似乎是个坏主意。例如,Spring 相对嘈杂,并且对我真的不需要知道的事情使用 WARN,但如果它为我想看到的事情记录一个 ERROR 条目。
【讨论】:
您可以通过更改 log4j.properties/log4j.xml 文件中的记录器级别来实现。
如果您想从包中过滤日志但保留记录器配置以供以后使用,则需要设置记录器的<level value="off"/>。
您还可以将其设置为最高级别以仅在出现错误或致命问题时进行记录。
应将以下条目添加到 log4j.xml 以关闭来自 hibernate 和 springframework 包的日志记录:
<logger name="org.springframework">
<level value="off"/>
</logger>
<logger name="org.hibernate">
<level value="off"/>
</logger>
【讨论】:
在 log4j.properties 中,您可以基于每个记录器定义单独的级别:
log4j.logger.<name>=FATAL
在 log4j.xml 中的语法是
<logger name="<name>">
<level value="fatal"/>
</logger>
【讨论】:
只是不要在您的 log4j.properties 中添加这些包。例如,您的属性文件中必须包含 Spring 的 this。如果您有以下条目(任何以 org.springframework 开头的条目),请将其取出。休眠也需要这样做。
#Logs the SQL from Spring
log4j.logger.org.springframework.jdbc.core.JdbcTemplate=ERROR
#Logs the SQL parameters from Spring
log4j.logger.org.springframework.jdbc.core.StatementCreatorUtils=ERROR
正如前面提到的,您还应该设置以下内容。我忘了提这个。
log4j.rootLogger=FATAL
or
log4j.rootLogger=ERROR
【讨论】: