如何过滤来自外部第三方框架的日志消息?我正在使用Hibernate和Spring框架,我想压缩日志,以便只显示我的log4j日志。
答案 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