过滤掉第三方框架中的log4j消息?

时间:2010-08-25 19:13:11

标签: java hibernate spring log4j

如何过滤来自外部第三方框架的日志消息?我正在使用Hibernate和Spring框架,我想压缩日志,以便只显示我的log4j日志。

4 个答案:

答案 0 :(得分:34)

在我的log4j.properties文件中,我将根记录器日志记录级别设置为ERROR。然后对于我特别想要记录的包,就像我的应用程序代码一样,我将日志记录级别设置为INFO或DEBUG。

log4j.rootLogger=ERROR, stdout
log4j.logger.com.initech.tps=DEBUG
log4j.logger.org.hibernate.SQL=INFO

我看到同事们将root日志设置为低,然后最终列出他们不想看到的所有内容,这对我来说似乎很落后。我宁愿列出我想要记录的内容而不是我不想记录的所有内容。

对于第三方组件,BTW完全关闭注册对我来说似乎是一个坏主意。例如,Spring相对比较嘈杂,并且使用WARN来处理我真正不需要知道的事情,但如果它记录了一个ERROR条目,我希望看到它。

答案 1 :(得分:14)

您可以通过更改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>

答案 2 :(得分:3)

在log4j.properties中,您可以基于每个记录器定义各个级别:

log4j.logger.<name>=FATAL

在log4j.xml中,语法为

<logger name="<name>">
  <level value="fatal"/> 
</logger>

&LT;名称&gt;通常是完全限定的类名。您可能希望使用WARN或ERROR而不是FATAL

答案 3 :(得分:2)

只是不要在log4j.properties中添加这些包。例如,您必须在属性文件中使用Spring。如果你有一些像下面这样的条目(任何以org.springframework开头的东西),请把它拿出来。同样需要为hibernate做。

#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