如何防止logback在每个日志开始时输出自己的状态?
这似乎是一个粗心的错误,但我似乎无法find原因。 使用logback / slf4j(最新版本slf4j-api-1.6.1,logback core / classic 0.9.24)进行日志logging。 最简单的testing日志configuration是:
<configuration> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <!-- DONT USE THIS FORMATTER FOR LIVE LOGGING THE %L LINE NUMBER OUTPUTTER IS SLOW --> <pattern>%le %-1r [%c{1}:%L] %m%n</pattern> </layout> </appender> <root level="DEBUG"> <appender-ref ref="stdout" /> </root> </configuration>
每个日志安装都以logback的内部状态行开始:
11:21:27,825 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy] 11:21:27,826 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:.../logback-test.xml] 11:21:28,116 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set 11:21:28,124 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] 11:21:28,129 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stdout] 11:21:28,180 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing component [layout] on top of the object stack. 11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - This appender no longer admits a layout as a sub-component, set an encoder instead. 11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder. 11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details 11:21:28,207 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG 11:21:28,207 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [stdout] to Logger[ROOT]
这是根据文档,logback格式默认使用的。 然后它完成读取configuration(它被设置为输出不同的格式),并继续正确的格式化输出。 有一个configuration参数<configuration debug="false">
不影响这一点。
任何人都知道如何closures这个?
如果将configuration
元素的debug
属性设置为true
,您将获得所有状态信息到控制台。 如果这是您的问题,只需将其设置为false或删除它。
如果您有WARN
或更高级别的任何configuration问题,您还将获得logging到控制台的所有状态信息(包括INFO
级别的消息)。 解决这个问题的最好方法是解决这个问题(在你的情况下用<encoder>
元素replace<layout>
<encoder>
元素)。
如果由于某种原因无法解决问题,但想要从控制台中删除状态信息,则可以改为configuration一个替代的StatusListener
。 使用NopStatusListener
完全删除状态信息:
<configuration> <statusListener class="ch.qos.logback.core.status.NopStatusListener" /> <!-- etc --> </configuration>
如文档中所述 ,如果在parsingconfiguration文件的过程中发生警告或错误,logback将自动在控制台上打印状态数据。
遵循http://logback.qos.ch/codes.html#layoutInsteadOfEncoder(即在其警告消息中由logback提及的链接)。; 一旦您按照其中提到的步骤操作,也就是说,如果用<编码器>replace<layout>元素,则logback将停止在控制台上打印消息。
Ceki答案是正确的:
(…)如果在parsingconfiguration文件的过程中出现警告或错误,logback将自动在控制台上打印状态数据。
一旦你做对了,日志的第一行就不会有任何污染了。
从2015年3月开始,在Logback 1.1.2中 ,您需要使用<encoder>
子组件 – 现在不推荐使用<layout>
,如果使用它,则会显示错误消息。 你无法控制这个,它是Logback的默认行为。
一些内部类也被重新命名了,甚至手册页中的例子都已经过时了!
这里是他们的错误代码帮助页面的代码片段,它具有正确的方式来configurationlogging器。 这完全解决了我的项目中的问题。 http://logback.qos.ch/codes.html#layoutInsteadOfEncoder
<appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>testFile.log</file> ... <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%msg%n</pattern> </encoder> </appender>
我意识到史蒂夫find了解决办法,但他没有提到它的线程。 如果有任何其他人遇到同样的问题,这是修复。
用“<编码器> .. </编码器>”replace“<布局>”元素这是罪魁祸首.. <layout class =“ch.qos.logback.classic.PatternLayout”>
这似乎是固定在0.9.29。 只做了几个testing。 没有Joran信息了。 我想这是修复提交。
我已经尝试了一切,没有为我工作。 我的问题是由于我的类path中有多个logback.xml文件。 这是多模块化项目中的常见情况。 当classpath中只有一个logback.xml文件时,不存在歧义,问题就解决了。
自己同样的问题挣扎着,也就是说,在开始的时候有一堆行与我的代码无关。 这是我如何修复它。
<configuration debug="false"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> --> <encoder> <pattern>%d{HH:mm:ss.SSS} %-5level %logger{10} - %msg%n</pattern> </encoder> </appender> <root level="error"> <appender-ref ref="STDOUT" /> </root> <logger name="fun.n.games" level="DEBUG" />
这是在pom.xml中使用以下条目运行的
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>