我已经制作了log4j appender,它将所有日志存储到一个文件中:
log.info("Hello world");
会将Hello World
存储到文件中。我如何能够将例外作为日志存储到该文件中。例如声明:
log.info(5 / 0);
应该将整个堆栈从DivisionByZero Exception
存储到log4j appender中声明的文件中。
P.S。我知道我可以将log.info(e.printStackTrace())
放入catch子句中,但我希望记录每个catched和non-catched异常。我正在测试,因此有很多例外情况不应该被捕获,只是抛出。我需要配置,属性或与log4j相关的任何其他语句,它们会将所有异常流式传输到其appender中。
P.S.S。我知道我可以将stderr输出重定向到文件,但我不想触摸控制台。
答案 0 :(得分:2)
如果您想要记录异常,则必须确保catch块执行日志记录,如:
catch (WhateverException e) {
log(e); // just a place holder ...
}
如果要记录未捕获的异常,则需要未捕获的异常处理程序。有关示例,请参阅here。
如果您希望能够记录每个异常,确保每个异常都被捕获,这一点非常重要。
并且要明确一点:应该可以使用未被捕获的处理程序,只需记录并重新抛出(最坏的情况是你必须将传入的throwable包装成一个RuntimeException的)。