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

时间:2010-02-25 06:26:09

标签: java logging

是否有记录器可以轻松记录我的堆栈跟踪(我得到的东西 ex.printStackTrace())?我搜索了log4j文档但一无所获 关于记录堆栈跟踪。

我可以用

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

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

如果log4j不会为我这样做,那么会有另一个日志包 为我记录堆栈跟踪?

感谢。

2 个答案:

答案 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;
    }