两个记录器引用相同的文件追加器,一个写另一个不写
Two loggers referencing same file appender, one writes the other does not
给定以下 logback xml 配置:
<appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.dir}/app-traffic</File>
<encoder>
<pattern>%message%n</pattern>
</encoder>
<rollingPolicy class="org.app.traffic.policy.AppTimeBasedRollingPolicy">
<FileNamePattern>${log.dir.archived}/app-traffic.%d{yyyyMMdd}</FileNamePattern>
</rollingPolicy>
</appender>
<logger name="org.my.package.FirstClass" additivity="false">
<level value="INFO"/>
<appender-ref ref="APPLICATION"/>
</logger>
<logger name="org.my.different.package.SecondClass" additivity="false">
<level value="INFO"/>
<appender-ref ref="APPLICATION"/>
</logger>
FirstClass
不会写入 app-trafic
日志,即使我看到它在调试时触发了它的 info() 方法。
SecondClass
记录器成功写入日志。
怎么会这样?
编辑:
调试第一个记录器 info
调用显示它正在被过滤,因为只允许警告消息?不知道为什么会这样,因为两个配置都是针对 INFO
我建议启用 logback 本身的调试输出,使用标志
-Dlogback.debug=true
启动时。查看输出是否获取了与预期不同的配置文件(可能是 logback-test.xml)或者日志级别是否设置在其他地方...
问题的根本原因是我的应用程序 class 实现了 ch.qos.logback.classic.selector.ContextSelector
。实际上有两个,一个是错误进口的。并设置:
System.setProperty(ClassicConstants.LOGBACK_CONTEXT_SELECTOR, LogbackContextSelector.class.getName());
它有一个方法 getLoggerContext
,它以非常类似巫术的方式在运行时更改了 logback 上下文。花了一段时间才找到这个。希望对以后的人有帮助。
给定以下 logback xml 配置:
<appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.dir}/app-traffic</File>
<encoder>
<pattern>%message%n</pattern>
</encoder>
<rollingPolicy class="org.app.traffic.policy.AppTimeBasedRollingPolicy">
<FileNamePattern>${log.dir.archived}/app-traffic.%d{yyyyMMdd}</FileNamePattern>
</rollingPolicy>
</appender>
<logger name="org.my.package.FirstClass" additivity="false">
<level value="INFO"/>
<appender-ref ref="APPLICATION"/>
</logger>
<logger name="org.my.different.package.SecondClass" additivity="false">
<level value="INFO"/>
<appender-ref ref="APPLICATION"/>
</logger>
FirstClass
不会写入 app-trafic
日志,即使我看到它在调试时触发了它的 info() 方法。
SecondClass
记录器成功写入日志。
怎么会这样?
编辑:
调试第一个记录器 info
调用显示它正在被过滤,因为只允许警告消息?不知道为什么会这样,因为两个配置都是针对 INFO
我建议启用 logback 本身的调试输出,使用标志
-Dlogback.debug=true
启动时。查看输出是否获取了与预期不同的配置文件(可能是 logback-test.xml)或者日志级别是否设置在其他地方...
问题的根本原因是我的应用程序 class 实现了 ch.qos.logback.classic.selector.ContextSelector
。实际上有两个,一个是错误进口的。并设置:
System.setProperty(ClassicConstants.LOGBACK_CONTEXT_SELECTOR, LogbackContextSelector.class.getName());
它有一个方法 getLoggerContext
,它以非常类似巫术的方式在运行时更改了 logback 上下文。花了一段时间才找到这个。希望对以后的人有帮助。