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

Как написать полный журнал стека в журнал?

Я поймал исключение и пытался записать трассировку стека в журналы следующим образом:

log.warn(e.getMessage());

Но все, что он сказал, было

null

Итак, я изменил его на

log.warn(e.toString());

И теперь он говорит только

java.lang.NullPointerException

Как написать полную трассировку стека в журнал, чтобы я мог видеть, где это Exception генерируется в приложении?

4b9b3361

Ответ 1

Обычно:

log.warn("message", e);

Но это также зависит от структуры ведения журнала.

Ответ 3

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

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

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

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

log.error("Message", exception);

С java.util.logging это может быть сделано через:

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

Ответ 4

В вашем методе исключения базовый String, который содержит сообщение, null.

Вышеупомянутый ответ, который теперь вычеркнут, сохраняется, за исключением того, что e не является нулевым, но переменная private t detailMessage в классе Throwable имеет значение null, поэтому e.getMessage() является строкой null, но e.toString() (который вызывает базовый нуль detailMessage.toString) выдает a NullPointerException.

Ответ 5

Если вы используете java8, вы можете сделать следующее:

        LOGGER.error("Caught exception while methodX. Please investigate: " 
                + exception 
                + Arrays.asList(exception.getStackTrace())
                .stream()
                .map(Objects::toString)
                .collect(Collectors.joining("\n"))
        );

Ответ 7

Если вы используете версию Java до 8, вы можете попробовать следующее:

            LOGGER.error("Error al recuperar proveedores de la base de datos: " + 
            e + Arrays.asList(e.getStackTrace()).stream().map(new Function(){
                    @Override
                    public Object apply(Object t) {
                        return t.toString();
                    }
                }).collect(Collectors.joining("\n")));