我在我的java应用程序中使用slf4j / log4j。
我的问题是,现在我只能记录异常堆栈跟踪,在try catch的catch部分调用适当的logger方法,如:
catch (AnException ex) {
logger.error("An exception occurred", ex);
}
我想在日志文件中加入我没有放入任何cacth的运行时异常,例如NullPointerException或NumberFormatException。
正如它们在控制台中显示的那样,我想有一种方法可以将此流从控制台重定向到SLF4J记录器。
任何人都知道我该怎么做?
答案 0 :(得分:1)
如果您要记录未经检查的例外,请抓住RuntimeException
并进行记录。
要记录所有例外,请抓住Exception
并记录它们
要记录错误,请捕获Throwable
并记录它们。
对于命令行程序,您可能希望在<{1}}方法中,在初始化日志记录框架后的main()
块中执行此操作。
如果您使用主题,则需要使用Runnable
/ Thread
的try
方法执行此操作。
在Servlet Web应用程序中,您可以在Filter
中执行此操作,并重新抛出异常,以便容器可以正确处理错误。
答案 1 :(得分:0)
我想强调另一个解决方案,它适用于您的应用程序中全局未捕获的异常,而无需每次都用 try/catch 块进行包装。
线程有一个名为 uncaughtExceptionHandler
的字段,每当出现未捕获的异常时都会使用。例如,可以在启动 main 方法中使用方法 Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler)
覆盖此字段一次。每次出现未捕获的异常时,您的自定义 UncaughtExceptionHandler 将用于处理它。
查看此 post 了解更多详情。