使用log4j修剪日志输出

时间:2009-11-10 20:57:54

标签: java logging log4j

如何使用log4j实现以下功能:

  • 仅记录来自特定类别的活动,即com.example.app但不包括com.example.app.contextcom.example.dao;
  • 记录级别为WARN或更高级别的所有事件。

2 个答案:

答案 0 :(得分:2)

您需要按顺序设置类别过滤器,并将appender阈值设置为更高的过滤器限制。

   <appender name="LOG_FILE" class="org.apache.log4j.FileAppender">
      <param name="File" value="log_file.log" />
      <param name="Threshold" value="WARN"/>

      <layout class="org.apache.log4j.PatternLayout">
         <!-- The default pattern: Date Priority [Category] Message\n -->
         <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
      </layout>
   </appender>

   <category name="com.example.app">
         <priority value="DEBUG" />
         <appender-ref ref="LOG_FILE" />
   </category>

   <category name="com.example.app.context">
         <priority value="WARN" />
         <appender-ref ref="LOG_FILE" />
    </category>

答案 1 :(得分:2)

在log4j.properties文件中,您可以在rootLogger上设置应用程序的全局日志级别:

log4j.rootLogger=DEBUG, APPENDER

您可以使用WARN,INFO,ERROR和FATAL代替DEBUG。

包含子包的包可以给出自己的日志级别,如下所示:

log4j.logger.com.example.app=DEBUG

从其子包中删除日志记录,将其loglevel设置为error或fatal:

#log4j.logger.com.example.app.context=ERROR
log4j.logger.com.example.app.dao=ERROR

编辑注释掉app.context行,以便从其父包继承DEBUG级别。