过滤记录器消息的级别

时间:2018-01-17 21:44:51

标签: java logging log4j2

我今天开始使用Log4j 2,我看到了三种指定消息级别的方法: 1.使用filter.threshold 2.在appender本身 3.或在rootLogger中 在指定记录器的消息级别时,建议使用哪种方式?

我目前将此代码作为Log4j2配置文件:

status = error
dest = err
name = PropertiesConfig

property.filename = logs/log.log

filter.threshold.type = ThresholdFilter
filter.threshold.level = trace

appender.console.type = Console
appender.console.name = ConsoleLogger
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%t.%-15c{1}] [%p] %d{HH:mm:ss.SSS} - %m%n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = trace

appender.randomAccessFile.type = RandomAccessFile
appender.randomAccessFile.name = File
appender.randomAccessFile.filename = logs/log.log
appender.randomAccessFile.immediateFlush = false
appender.randomAccessFile.append = false
appender.randomAccessFile.layout.type = PatternLayout
appender.randomAccessFile.layout.pattern = %-10[%t.%c{1}] [%p] %d{HH:mm:ss.SSS} - %m%n
appender.randomAccessFile.filter.threshold.type = ThresholdFilter
appender.randomAccessFile.filter.threshold.level = trace

rootLogger.level = trace
rootLogger.includeLocation = false
rootLogger.appenderRef.stdout.ref = ConsoleLogger
rootLogger.appenderRef.file.ref = File

你可以看到我在3个地方有水平。我认为那些appender过滤器用于那些特定的日志记录接口和rootLogger.level用于全局过滤器,但是这个代码做了什么?这是默认值还是什么?

filter.threshold.type = ThresholdFilter
filter.threshold.level = trace

1 个答案:

答案 0 :(得分:1)

来自log4j documentation -

  

可以在以下四个位置之一配置过滤器:

     
      
  1. 上下文范围的过滤器直接在配置中配置。   被这些过滤器拒绝的事件将不会传递给   记录器进一步处理。一旦事件被a接受   上下文范围的过滤器不会被任何其他上下文范围评估   过滤器也不会使用Logger的级别来过滤事件。该   但事件将由Logger和Appender Filters评估。
  2.   
  3. 在指定的Logger上配置记录器过滤器。评估这些   在上下文范围的过滤器和记录器的日志级别之后。   被这些过滤器拒绝的事件将被丢弃   无论是什么,都不会将事件传递给父记录器   可加性设置。
  4.   
  5. Appender过滤器用于确定特定的Appender是否应该处理事件的格式化和发布。
  6.   
  7. Appender参考过滤器用于确定记录器是否应将事件路由到追加器。
  8.   

简单来说,下面是过滤日志消息的过滤顺序 -

  1. 上下文范围的过滤器
  2. 在记录器级别声明的级别
  3. Appender过滤器
  4. 如果级别在较低序列中变得特定,则会再次过滤日志消息。例如如果在上下文范围过滤器中设置的级别为WARN且在appender过滤器处设置的级别为ERROR,则将记录具有ERROR日志级别的日志消息。

    如果级别在较低序列中变为通用级别,则使用更高序列的级别设置。例如如果在上下文范围过滤器中设置的级别为WARN且在记录器级别设置的级别为INFO,则具有WARN日志级别的日志消息将转发到appender。

    现在,通过上面的解释,您可以理解每个过滤器序列都有自己的控制范围。使用一个小的配置文件,您可能会认为它不是很有用,但如果您有一个包含多个appender和logger的大型配置文件,它将非常有用。

    因此,没有推荐的配置。鉴于您的配置,我宁愿删除上下文范围的过滤器和appender过滤器。而是使用Logger创建Logger和控制日志级别。 RootLogger级别通常设置为WARNERROR,以避免详细记录应用程序库。