Java - нужен пакет регистрации, который будет регистрировать трассировку стека - PullRequest
13 голосов
/ 25 февраля 2010

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

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

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

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

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

Спасибо.

Ответы [ 2 ]

32 голосов
/ 25 февраля 2010

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

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

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

Другой вариант - регистрация общего доступа , где то же самое:

log.error("Message", exception);

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

logger.log(Level.SEVERE, "Message", exception);
3 голосов
/ 24 сентября 2014

В 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...