抑制所有的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.xml
configuration文件的重复类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阶段没有ERROR
或WARN
,我还是得到了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器在一个static
variables; 文档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属性将在假设下输出状态信息
- findconfiguration文件
- 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.out
或System.err
,则这些只是System
类中的公共静态PrintStream
variables。 您可以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>