如何使用logger打印异常?

Pan*_*kaj 19 java logging exception

我有一种情况,我想使用记录器打印catch块中捕获的所有异常.

 try {
        File file = new File("C:\\className").mkdir();
        fh = new FileHandler("C:\\className\\className.log");
        logger.addHandler(fh);
        logger.setUseParentHandlers(false);
        SimpleFormatter formatter = new SimpleFormatter();
        fh.setFormatter(formatter);
    } catch (Exception e) {
        logger.info(e);
    }
Run Code Online (Sandbox Code Playgroud)

我得到错误记录器无法应用 java.io.Exception...

我担心的是,如果我在try块中执行了很多操作,并且只保留一个catch块作为catch(Exception e),那么有没有办法使用logger来打印catch块中捕获的任何异常?注意:我们使用的是java.util.logging.Logger API

Gio*_*aki 32

您应该澄清您使用的记录器.

org.apache.commons.logging.Loginterface具有方法void error(Object message, Throwable t)(和方法void info(Object message, Throwable t)),它将堆栈跟踪与您的自定义消息一起记录.Log4J实现也有这个方法.

所以,可能你需要写:

logger.error("BOOM!", e);
Run Code Online (Sandbox Code Playgroud)

如果您需要使用INFO级别进行日志记录(但是,这可能是一个奇怪的用例),那么:

logger.info("Just a stack trace, nothing to worry about", e);
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

  • 原来如此.似乎还有一些类似的功能:`java.util.logging.Logger.getLogger("Test").log(Level.INFO,"BOOM!",e);`< - 这对我有用. (4认同)

小智 5

使用:LOGGER.log(Level.INFO, "Got an exception.", e);
LOGGER.info("Got an exception. " + e.getMessage());

  • 如果异常是意外的,那么我建议对日志消息使用 SEVERE 的 WARNING 日志级别 (2认同)