是否有记录器可以轻松记录我的堆栈跟踪(我得到的东西
ex.printStackTrace()
)?我搜索了log4j文档但一无所获
关于记录堆栈跟踪。
我可以用
自己做StringWriter sw = new StringWriter();
ex.printStackTrace(new PrintWriter(sw));
String stacktrace = sw.toString();
logger.error(stacktrace);
但我不想在整个地方复制这段代码。
如果log4j不会为我这样做,那么会有另一个日志包 为我记录堆栈跟踪?
感谢。
答案 0 :(得分:32)
使用log4j这可以通过以下方式完成:
logger.error("An error occurred", exception);
第一个参数是要显示的消息,第二个参数是异常(throwable),其堆栈跟踪被记录。
另一个选项是commons-logging,它是相同的:
log.error("Message", exception);
使用java.util.logging
,可以通过以下方式完成:
logger.log(Level.SEVERE, "Message", exception);
答案 1 :(得分:3)
在java.util.logging中,您可以使用自定义日志格式化程序初始化记录器,如下所示:
private Logger initTextLogger() throws SecurityException, IOException {
Logger logger = Logger.getLogger(YourClass.class.getName());
FileHandler fileHandler = new FileHandler(logFilePath, false);
SimpleFormatter logFormatter = new SimpleFormatter() {
@Override
public String format(LogRecord record) {
String stacktrace = "";
Throwable t = record.getThrown();
if(t!=null){
StringWriter sw = new StringWriter();
t.printStackTrace(new PrintWriter(sw));
stacktrace = sw.toString();
}
return record.getLevel() + ": " + record.getMessage() + "\r\n"
+ stacktrace;
}
};
fileHandler.setFormatter(logFormatter);
logger.addHandler(fileHandler);
return logger;
}