Ответ 1
Обычно:
log.warn("message", e);
Но это также зависит от структуры ведения журнала.
Я поймал исключение и пытался записать трассировку стека в журналы следующим образом:
log.warn(e.getMessage());
Но все, что он сказал, было
null
Итак, я изменил его на
log.warn(e.toString());
И теперь он говорит только
java.lang.NullPointerException
Как написать полную трассировку стека в журнал, чтобы я мог видеть, где это Exception генерируется в приложении?
Обычно:
log.warn("message", e);
Но это также зависит от структуры ведения журнала.
Вы можете использовать
logger.log(Level.WARN, "logged exception", ex);
или
logger.warn("logged exception", ex);
Ресурсы:
Используя log4j, это делается с помощью:
logger.error("An error occurred", exception);
Первый аргумент - это отображаемое сообщение, второй - исключение (throwable), трассировка стека которого регистрируется.
Другим вариантом является регистрация общего доступа, где он такой же:
log.error("Message", exception);
С java.util.logging это может быть сделано через:
logger.log(Level.SEVERE, "Message", exception);
В вашем методе исключения базовый String
, который содержит сообщение, null
.
Вышеупомянутый ответ, который теперь вычеркнут, сохраняется, за исключением того, что e
не является нулевым, но переменная private t detailMessage
в классе Throwable
имеет значение null, поэтому e.getMessage()
является строкой null
, но e.toString()
(который вызывает базовый нуль detailMessage.toString
) выдает a NullPointerException
.
Если вы используете java8, вы можете сделать следующее:
LOGGER.error("Caught exception while methodX. Please investigate: "
+ exception
+ Arrays.asList(exception.getStackTrace())
.stream()
.map(Objects::toString)
.collect(Collectors.joining("\n"))
);
Возможно, вы ищете что-то вроде этого: http://www.javapractices.com/topic/TopicAction.do?Id=78
Если вы используете версию 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")));