2013-07-11 80 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