26

我有一种情况,我想使用记录器打印在 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);
    }

我得到错误记录器不能应用于java.io.Exception...

我担心的是,如果我在 try 块中做了这么多事情,而我只保留一个 catch 块作为 catch(Exception e),那么有没有办法使用记录器打印在 catch 块中捕获的任何类型的异常?注意:我们使用的是 java.util.logging.Logger API

4

4 回答 4

40

您可能应该澄清您使用的是哪个记录器。

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

所以,可能你需要写:

logger.error("BOOM!", e);

如果您需要使用 INFO 级别记录它(不过,这可能是一个奇怪的用例),那么:

logger.info("Just a stack trace, nothing to worry about", e);

希望能帮助到你。

于 2013-04-04T08:16:27.173 回答
5

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

于 2014-09-25T11:46:19.797 回答
4

尝试记录堆栈跟踪,如下所示:

logger.error("Exception :: " , e);
于 2013-04-04T07:59:07.460 回答
0

您可以使用此方法将异常堆栈记录到 String

 public String stackTraceToString(Throwable e) {
    StringBuilder sb = new StringBuilder();
    for (StackTraceElement element : e.getStackTrace()) {
        sb.append(element.toString());
        sb.append("\n");
    }
    return sb.toString();
}
于 2013-04-04T07:55:25.083 回答