Java - нужен пакет протоколирования, который будет регистрировать стек
Есть ли Logger, который будет легко записывать мой стек (что я получаю с помощью
ex.printStackTrace()
)? Я искал документы log4j и ничего не нашел
о протоколировании stacktrace.
Я могу сделать это сам с
StringWriter sw = new StringWriter();
ex.printStackTrace(new PrintWriter(sw));
String stacktrace = sw.toString();
logger.error(stacktrace);
но я не хочу дублировать этот код повсюду.
Если log4j не сделает этого для меня, есть еще один пакет протоколирования, который будет
войдите в стек для меня?
Спасибо.
Ответы
Ответ 1
Используя log4j, это делается с помощью:
logger.error("An error occurred", exception);
Первый аргумент - это сообщение, которое будет отображаться, второе - исключение (throwable), чья стопка стека зарегистрирована.
Другая опция commons-logging, где она то же самое:
log.error("Message", exception);
С java.util.logging
это можно сделать с помощью:
logger.log(Level.SEVERE, "Message", exception);
Ответ 2
В 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;
}