2009-11-10 53 views
0

我如何能实现以下使用log4j的剪裁下来的日志输出:使用log4j的

  • 日志仅事件从一个特定类别的到来,即com.example.app但不com.example.app.contextcom.example.dao;
  • 记录级别为WARN或更高的所有事件。

回答

2

您需要设置catergory过滤器,将appender阈值设置为higer过滤器限制。

<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

我认为要获取所要求的海报行为,您需要将com.example.app设置为WARN并将com.example.app.context设置为OFF。我不认为有一种方法可以在每个com.example.app。* off上关闭com.example.app,除非明确重复每个子包。 – 2009-11-10 21:21:12

+0

要关闭子包(到比父级更低的级别,还必须将添加剂设置为false)。 – Yishai 2009-11-10 21:24:03

+0

感谢您的回答。但是,我这样就会失去'com.example.app.context'文件中的WARN'日志记录,我想查看它。 – 2009-11-11 11:35:45

2

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

log4j.rootLogger=DEBUG, APPENDER 

您可以使用WARN,INFO,ERROR和FATAL,而不是DEBUG。

与子包一个包可以给自己的日志级别,像这样:

log4j.logger.com.example.app=DEBUG 

从其子包删除记录,设置其日志级别的错误或致命的:

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

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

+0

感谢您的回答。然而,我这样就会失去'com.example.app.context'文件中的<'ERROR'日志记录,我想查看 – 2009-11-11 11:36:16

+0

如果您希望'app.context'继承'app'的日志级别,只是不要在属性文件中为'app.context'放置一个新的日志级别。你能编辑你的问题,并详细阐述一下你想要的东西吗? – rsp 2009-11-11 14:47:46