2013-07-11 45 views
0

我正在使用log4j(通过slf4j)配置log4j.xml。我想知道如何禁用log4j显示的关于它自己的消息。 例如,如果在的log4j.xml指定的日志文件无法创建,log4j的在控制台上显示以下信息:log4j如何禁用内部消息?

log4j:ERROR setFile(null,true) call failed. 
java.io.FileNotFoundException: \LogFile.log (Accesso negato) 
    at java.io.FileOutputStream.open(Native Method) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:212) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:136) 
    at org.apache.log4j.FileAppender.setFile(FileAppender.java:294) 
    at org.apache.log4j.RollingFileAppender.setFile(RollingFileAppender.java:207) 
    at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165) 
    at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307) 
    at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:295) 
    at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:176) 
    at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:191) 
    at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:523) 
    at org.apache.log4j.xml.DOMConfigurator.parseRoot(DOMConfigurator.java:492) 
    at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:1006) 
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:872) 
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:778) 
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526) 
    at org.apache.log4j.LogManager.<clinit>(LogManager.java:127) 
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:66) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281) 

我不希望用户看到完整的异常堆栈。 在此先感谢

回答

0

一个解决方案将写一个com.myapp.SilentErrorHandler其实施org.apache.log4j.spi.ErrorHandler但什么都不做。

配置在log4j.xml是:

<appender name="file" class="org.apache.log4j.RollingFileAppender"> 
    <errorHandler class="com.myapp.SilentErrorHandler" /> 
    <param name="File" value="\LogFile.log"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
    ... 
    </layout> 
</appender> 

需要注意的是默默忽略错误通常是一件坏事。您可以考虑使用FallbackErrorHandler,如果主appender失败,它允许指定后备appender。

+0

它的工作原理!非常感谢!也谢谢你的建议,我很快就会尝试FallbackErrorHandler。 ;) – user2572526