Подтвердить что ты не робот

Java - нужен пакет протоколирования, который будет регистрировать стек

Есть ли Logger, который будет легко записывать мой стек (что я получаю с помощью ex.printStackTrace())? Я искал документы log4j и ничего не нашел о протоколировании stacktrace.

Я могу сделать это сам с

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

но я не хочу дублировать этот код повсюду.

Если log4j не сделает этого для меня, есть еще один пакет протоколирования, который будет войдите в стек для меня?

Спасибо.

4b9b3361

Ответ 1

Используя log4j, это делается с помощью:

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

Первый аргумент - это сообщение, которое будет отображаться, второе - исключение (throwable), чья стопка стека зарегистрирована.

Другая опция commons-logging, где она то же самое:

log.error("Message", exception);

С java.util.logging это можно сделать с помощью:

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

Ответ 2

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