Допустим, вы перехватываете исключение и получаете следующее в стандартном выводе (например, в консоли), если выполняете e.printStackTrace () :
java.io.FileNotFoundException: so.txt
at java.io.FileInputStream.<init>(FileInputStream.java)
at ExTest.readMyFile(ExTest.java:19)
at ExTest.main(ExTest.java:7)
Теперь я хочу отправить это в регистратор, например, log4j, чтобы получить следующее:
31947 [AWT-EventQueue-0] ERROR Java.io.FileNotFoundException: so.txt
32204 [AWT-EventQueue-0] ERROR at java.io.FileInputStream.<init>(FileInputStream.java)
32235 [AWT-EventQueue-0] ERROR at ExTest.readMyFile(ExTest.java:19)
32370 [AWT-EventQueue-0] ERROR at ExTest.main(ExTest.java:7)
Как я могу это сделать?
try {
...
} catch (Exception e) {
final String s;
... // <-- What goes here?
log.error( s );
}
java
logging
log4j
stack-trace
SyntaxT3rr0r
источник
источник
log.error(e.getLocalizedMessage(), e)
что полностью излишним. Это обрабатывает нуль для первого аргумента?log4j-1.2.8.jar
и я хотел напечатать всеstackTrace
в моем файле журнала, поэтому я попытался, как вы упомянули выше, но это печать только на моем файле журналаnullPointerException
. Я был использован в моем коде,e.printStackTrace()
он печатает все следы. Почему этот Колаверы?Если вы хотите записать трассировку стека без исключения, просто сделайте это:
источник
Вы также можете получить трассировку стека в виде строки через
ExceptionUtils.getStackTrace
.Смотрите: ExceptionUtils.java
Я использую его только для того
log.debug
, чтобы держатьlog.error
простой.источник
Просто потому, что это случилось со мной и может быть полезным. Если вы делаете это
вы получите заголовок исключения, а не всю трассировку стека. Потому что регистратор будет думать, что вы передаете строку. Сделай это так,
{}
как сказал скаффманисточник
Throwable.toString()
что не возвращает трассировку стека. (Предполагается, что вы используете регистратор, который знает, что делать с '{}'.)Ответ от Скаффмана, безусловно, правильный ответ. Все методы ОК , такие как
error()
,warn()
,info()
,debug()
взять метательную в качестве второго параметра:Тем не менее, вы также можете извлечь Stacktrace в виде строки. Иногда это может быть полезно, если вы хотите воспользоваться возможностью форматирования с использованием заполнителя "{}" - см. Метод.
void info(String var1, Object... var2);
В этом случае, скажем, у вас есть трассировка стека как String, тогда вы можете сделать что-то вроде этого:Это выведет параметризованное сообщение и трассировку стека в конце так же, как и для метода:
logger.error("error: ", e);
Я на самом деле написал библиотеку с открытым исходным кодом, в которой есть утилита для извлечения трассировки стека в виде строки с возможностью интеллектуальной фильтрации некоторого шума из трассировки стека. Т.е., если вы укажете префикс пакета, который вас интересует в извлеченной трассировке стека, он будет отфильтрован из не относящихся к делу частей и предоставит вам очень обобщенную информацию. Вот ссылка на статью, которая объясняет, какие утилиты есть в библиотеке и где ее взять (как в виде артефактов maven, так и в источниках git) и как ее использовать. Java-библиотека с открытым исходным кодом с фильтрацией трассировки стека, преобразованием Unicode Sarsnt String и сравнением версий. См. Параграф « Фильтр шума Stacktrace »
источник
Этот ответ может быть не связан с заданным вопросом, но связан с названием вопроса.
ИЛИ
ИЛИ
источник
В Log4j 2 вы можете использовать Logger.catching () для регистрации трассировки стека из обнаруженного исключения.
источник
это было бы хорошо, если бы log4j регистрировал ошибки / исключения - можно было прочитать с помощью splunk / other logging / monitor s / w. все является формой пары ключ-значение. log4j получит трассировку стека из Exception obj
e
источник
источник
Вы можете использовать приведенный ниже код:
Здесь вы можете просто позвонить:
LogWriterUtility.errorWithAnalysis( YOUR_EXCEPTION_INSTANCE);
Он выведет stackTrace в ваш журнал.
источник
Создайте это
class
:Назовите это в своем коде
источник