Java – 需要一个记录堆栈跟踪的日志包

是否有一个Logger可以轻松记录我的ex.printStackTrace()得到的ex.printStackTrace() )? 我搜索了log4j文档,发现没有关于记录堆栈跟踪的信息。

我可以自己做

 StringWriter sw = new StringWriter(); ex.printStackTrace(new PrintWriter(sw)); String stacktrace = sw.toString(); logger.error(stacktrace); 

但我不想在整个地方复制这些代码。

如果log4j不会为我执行此操作,是否有另一个日志包将为我记录堆栈跟踪?

谢谢。

使用log4j,这可以通过以下方式完成:

 logger.error("An error occurred", exception); 

第一个参数是要显示的消息,第二个参数是exception(throwable),其堆栈跟踪被记录。

另一个选择是commons-logging ,它是相同的:

 log.error("Message", exception); 

使用java.util.logging可以通过以下方式完成:

 logger.log(Level.SEVERE, "Message", exception); 

在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; }