0
votes

I'm using log4j (via slf4j) configured with log4j.xml. I would like to know how can I disable the messages that log4j displays about itself. For example, if the log file specified in the log4j.xml can't be created, log4j shows the following messages on the console:

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)

I don't want that the users see the full exception stack. Thanks in advance

1

1 Answers

0
votes

A solution would be writing a com.myapp.SilentErrorHandler which implements org.apache.log4j.spi.ErrorHandler but does nothing.

Configuration in log4j.xml would be :

 <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>

Note that silently ignoring errors is generally a bad thing. You may consider using FallbackErrorHandler which allows to specify a fallback appender if the primary appender fails.