Ответ от Скаффмана, безусловно, правильный ответ. Все методы ведения журнала, такие как error()
, warn()
, info()
, debug()
, принимают Throwable в качестве второго параметра:
try {
...
} catch (Exception e) {
logger.error("error: ", e);
}
Тем не менее, вы также можете извлекать трассировку стека в виде строки. Иногда это может быть полезно, если вы хотите воспользоваться возможностью форматирования с использованием заполнителя "{}" - см. Метод void info(String var1, Object... var2);
В этом случае, скажем, у вас есть трассировка стека как String, тогда вы можете сделать что-то вроде этого:
try {
...
} catch (Exception e) {
String stacktrace = TextUtils.getStacktrace(e);
logger.error("error occurred for usename {} and group {}, details: {}",username, group, stacktrace);
}
Это выведет параметризованное сообщение и трассировку стека в конце так же, как и для метода: logger.error("error: ", e);
На самом деле я написал библиотеку с открытым исходным кодом, в которой есть утилита для извлечения трассировки стека в виде строки с возможностью интеллектуальной фильтрации некоторого шума из трассировки стека. То есть если вы укажете префикс пакета, который вас интересует в извлеченной трассировке стека, он будет отфильтрован из не относящихся к делу частей и предоставит вам очень обобщенную информацию. Вот ссылка на статью, которая объясняет, какие утилиты есть в библиотеке и где ее взять (как в виде артефактов maven, так и в источниках git) и как ее использовать. Java-библиотека с открытым исходным кодом с фильтрацией трассировки стека, анализ Unicode для анализа Silent String и сравнение версий См. Параграф « Фильтр шумов Stacktrace »