如何防止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>