我有一种情况,我想使用记录器打印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),那么有没有办法使用logger来打印catch块中捕获的任何异常? 注意:我们使用的是java.util.logging.Logger API
答案 0 :(得分:27)
您应该澄清您使用的记录器。
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);
希望它有所帮助。
答案 1 :(得分:4)
使用:LOGGER.log(Level.INFO, "Got an exception.", e);
或LOGGER.info("Got an exception. " + e.getMessage())
;
答案 2 :(得分: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();
}
答案 3 :(得分:0)
尝试记录堆栈跟踪,如下所示:
logger.error("Exception :: " , e);