我今天开始使用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
答案 0 :(得分:1)
来自log4j documentation -
可以在以下四个位置之一配置过滤器:
- 上下文范围的过滤器直接在配置中配置。 被这些过滤器拒绝的事件将不会传递给 记录器进一步处理。一旦事件被a接受 上下文范围的过滤器不会被任何其他上下文范围评估 过滤器也不会使用Logger的级别来过滤事件。该 但事件将由Logger和Appender Filters评估。
- 在指定的Logger上配置记录器过滤器。评估这些 在上下文范围的过滤器和记录器的日志级别之后。 被这些过滤器拒绝的事件将被丢弃 无论是什么,都不会将事件传递给父记录器 可加性设置。
- Appender过滤器用于确定特定的Appender是否应该处理事件的格式化和发布。
- Appender参考过滤器用于确定记录器是否应将事件路由到追加器。
醇>
简单来说,下面是过滤日志消息的过滤顺序 -
如果级别在较低序列中变得特定,则会再次过滤日志消息。例如如果在上下文范围过滤器中设置的级别为WARN
且在appender过滤器处设置的级别为ERROR
,则将记录具有ERROR
日志级别的日志消息。
如果级别在较低序列中变为通用级别,则使用更高序列的级别设置。例如如果在上下文范围过滤器中设置的级别为WARN
且在记录器级别设置的级别为INFO
,则具有WARN
日志级别的日志消息将转发到appender。
现在,通过上面的解释,您可以理解每个过滤器序列都有自己的控制范围。使用一个小的配置文件,您可能会认为它不是很有用,但如果您有一个包含多个appender和logger的大型配置文件,它将非常有用。
因此,没有推荐的配置。鉴于您的配置,我宁愿删除上下文范围的过滤器和appender过滤器。而是使用Logger
创建Logger
和控制日志级别。 RootLogger
级别通常设置为WARN
或ERROR
,以避免详细记录应用程序库。