抑制所有的Logback输出到控制台?

我怎样才能configurationLogback的所有输出到控制台(标准输出)? 特别是,我想抑制(或redirect)Logback自己的日志消息,如下所示:

16:50:25,814 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] 16:50:25,814 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml] 16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs multiple times on the classpath. 16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml] 16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml] 16:50:25,923 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set 16:50:25,924 |-INFO in ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter@1a15291 - Will scan for changes in file [/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml] every 60 seconds. 

我需要禁用所有日志logging到标准输出,因为我们的生产环境不允许应用程序将任何消息打印到标准输出。

注意我使用的是Logback 0.9.21,SLF4J 1.6.0,我们的应用程序在WebLogic 10.3.2中运行。

这些消息只显示至less有以下一种情况是正确的:

  • 您在logback.xml文件中启用了debugging
  • 你的configuration有错误。 这就是这种情况–logback抱怨find了多个configuration文件。
  • 如果您的环境提供冲突的文件,则存在类path问题。 (这个昨天发生在我身上,是这个问题的真正原因)。
  • (在logback中有一个错误 – 已经发生)

纠正这个问题,这些消息应该消失。

HolgerHoffstätte在他的诊断中是正确的,重复的类path条目消息是Logback如何计算类path条目中的一个bug的症状。 Robert Elliot还在Logback 用户邮件列表的一个线程中 描述了这个问题。 根据Robert和其他人在SLF4J邮件列表上的相关讨论,当使用Logback的应用程序在WebLogic容器中运行时,由于WebLogic类加载器的运行方式,Logback会报告logback.xmlconfiguration文件的重复类path条目。 但是,无论WebLogic类加载器是否应该只报告唯一的类path条目,Logback应该只计算唯一的类path条目,以便它不打印这个令人困惑的虚假消息。

我已经为LBCLASSIC-159实施了一个修复程序 ,它基本上做了Robert Elliotbuild议的修改,并使用一个集合而不是一个列表来保存类加载程序返回的资源,从而有效地消除了任何重复的类path资源。 我已经成功testing了Logback 0.9.24,SLF4J 1.6.1和WebLogic 10.3.2的修复程序。 正如Thorbjørn在他的回答中所预测的那样,通过这个修复,Logback不再将重复的类path条目状态消息(或任何其他信息性消息)显示到标准输出。

我希望维护者将我的修补程序集成到主要的Logback 源代码库中,并将其包含在下一个版本中。

这是一个“我也是”的答案,对不起!

令人高兴的是,我find了一个解决scheme(见更新)。

与其他一些答案相反,尽pipe在configuration阶段没有ERRORWARN ,我还是得到了LogBackconfigurationINFO消息stream。

这是我的信息:

 13:39:20,457 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy] 13:39:20,457 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] 13:39:20,457 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/home/carl/workspace-LSY/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/IceProfile/WEB-INF/classes/logback.xml] 13:39:20,496 |-INFO in ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter@14e2c9c - Will scan for changes in file [/home/carl/workspace-LSY/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/IceProfile/WEB-INF/classes/logback.xml] every 60 seconds. 13:39:20,496 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter 13:39:20,497 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] 13:39:20,501 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT] 13:39:20,510 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property 13:39:20,510 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing component [encoder] on top of the object stack. 13:39:20,537 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG 13:39:20,537 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT] 13:39:20,538 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [ch.qos.logback] to OFF 13:39:20,538 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [ch.qos.logback] to false 13:39:20,538 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration. 

这是我的configuration:

 <configuration debug="true" scan="true"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoders are by default assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="STDOUT" /> </root> <logger name="ch.qos.logback" level="OFF" additivity="false" /> </configuration> 

这是垃圾邮件,我不想要,我认为自己是无辜的挑衅,我希望得到一些帮助,摆脱它。

我可能会“有罪”的一个方面是我正在初始化我的logging器在一个staticvariables; 文档build议使用实例variables。

版本:

  • 的logback-经典0.9.24.jar
  • 的logback-核心0.9.24.jar
  • SLF4J-API-1.6.1.jar
  • 在Ubuntu 11.04下运行在Tomcat 6.0中的IceFaces 2.0应用程序中执行

UPDATE

终于搞清楚是什么问题了!

从精细的手册 (和Thorbjørn的回答 ):

设置元素内的debugging属性将在假设下输出状态信息

  1. findconfiguration文件
  2. configuration文件是格式良好的XML。

我的错误是

 <configuration debug="true" scan="true"> 

回想起来, 呃! 希望这些信息能够帮助其他人。

所以我有同样的问题,但发现删除不正确的<布局/>条目弃用0.9.4左右的地方,消息消失…

你应该看起来像一些东西

 <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>info</level> </filter> <encoder> <pattern>%d{yyyy-MM-dd} %d{HH:mm:ss} %.-1level %thread %logger{36}: %m%n</pattern> </encoder> </appender> 

我已经写了一篇更完整的描述,说明我改变了什么

我不熟悉Logback。 但是,如果打印到System.outSystem.err ,则这些只是System类中的公共静态PrintStreamvariables。 您可以PrintStream子类并将系统输出variables设置为您的子类,从而控制它的工作方式。

例如:

 public class NOPPrintStream extends PrintStream { public NOPPrintStream() { super((OutputStream)null); } public void println(String s) { /* Do nothing */ } // You may or may not have to override other methods } public class MyClass { public static void main(String[] args) { System.out = new NOPPrintStream(); // Start program } } 

(此代码未经testing)

在我的情况下,我有一个依赖项目中的“logback-test.xml”被部署为webapp jar。 “logback-test.xml”文件以

 <configuration debug="false" scan="true"> 

'scan =“true”'属性产生了这个错误:

 ERROR in ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter@716de067 - URL [jar:file:/C:/Local...cut.../WEB-INF/lib/My.Dev.jar!/logback-test.xml] is not of type file 

这导致了67(!)更多的信息行。

通过删除“scan =”true“”属性,logback日志完全消失。

实际上,多次报告相同的logback.xml位置,似乎更像是一个在logback中的错误。 或者把这个报告给logback JIRA( 这里 ),或者首先检查这个jar是否在类path上多次。

您最有可能在您的logback.xml中configuration了一个元素。 如果您不希望任何控制台更新日志框架本身的状态,则可以将其删除。 尽pipelogback框架build议不要将其禁用以进行故障排除。

控制台侦听器有一个名为StatusListenerAsList的选项,它将状态消息保存为专用列表。 如果需要,可以使用一些代码通过JMX公开它。

我只是想添加有关在logback 1.0.2中添加的默认标题消息的信息:

 #logback.classic pattern: %d [%thread] %-5level %logger{36} - %msg%n 

我发现,在logback消息 ,但是真的很难find。

如果您希望删除此消息,则必须将outputPatternAsPresentationHeader设置为false:

 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d %-5level [%thread] %logger{0}: %msg%n</pattern> <!-- do not print pattern as a header --> <outputPatternAsPresentationHeader>false</outputPatternAsPresentationHeader> </encoder> </appender>