Log4j同步我想捕获log4j:ERROR setFile(null,true)调用失败

时间:2016-11-24 12:15:25

标签: java log4j

我想将日志信息发送到“审核”文件。我曾考虑过将log4j与独占的Appender一起使用:

LOGGER_AUDIT.info("Text of audit");

我想确保它是同步编写的。如果发生异常,例如:

og4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: D:audit.log (Access denied)
...

我想抓住它并停止执行。

这将是这样的:

try {
   LOGGER_AUDIT.info("Text of audit");
} catch(LoggerException logExc) {
   // TODO Ops... the logger do not write.
   throw logExc;
}

1 个答案:

答案 0 :(得分:0)

您可以通过调用:

强制执行log4j配置处理
BasicConfigurator.resetConfiguration();
DOMConfigurator.configureAndWatch( log4jConfigPath );

要捕获异常,您可以使用ErrorHandler功能。 https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/spi/ErrorHandler.html

这是如何配置的:

<appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
  <errorHandler class="org.apache.log4j.varia.FallbackErrorHandler">
       <root-ref/>
       <appender-ref ref="console"/>
  </errorHandler>
  <param name="File" value="C:/temp/test.log"/>
  <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d %-5p %30.30c - %m%n"/>
  </layout>
</appender>

您可以使用自己的ErrorHandler而不是FallbackErrorHandler。默认使用OnlyOnceErrorHandler。它将异常打印到STDERR。