Различия между методами ошибок в log4j 1.x - PullRequest
0 голосов
/ 14 ноября 2018

В части ведения журнала проекта, в котором я работаю, я пытаюсь оптимизировать сообщения об ошибках, которые отображаются в управлении журналами. Сообщения об ошибках в журнале кодируются так:

String errorMessage =" Problem with server "+"\n"+t.getMessage();
_logger.fatal(errorMessage);

Где t - объект Throwable, а _logger - объект Logger, связанный с каркасом log4j.

Что мне интересно, что изменится, если я использую _logger.fatal(errorMessage, t); вместо _logger.fatal(errorMessage);? Если между ними есть существенная разница, какой из них будет лучше использовать?

Edit: я только что понял, что скопировал "роковой" пример вместо "error". Однако, мой вопрос такой же и для рокового.

1 Ответ

0 голосов
/ 14 ноября 2018

Практически все Java logging Framework (увы, у нас их много ...) поддерживают установку Throwable в качестве последнего параметра.

Это приведет к регистрации трассировки стека, что может быть чрезвычайно полезным для диагностики и устранения проблемы.

Я бы никогда не дал исключение регистратору, если причина исключения действительно хорошо известна, а печать исключения - просто ненужный шум. Например здесь:

try {
   int port = Integer.parseInt(input);
   // do something with the port
} catch (NumberFormatException e) {
   logger.error("'{}' is not a valid port number: {}", input, e.toString);
}

Другой случай, когда исключение перебрасывается (и что-то еще, в конце концов, запишет его более подробно).

Но не с «Проблемой с сервером» (и на уровне FATAL не меньше). Похоже, вы хотите получить как можно больше информации.

Также обратите внимание, что в этих случаях e.toString() обычно лучше, чем e.getMessage(), поскольку оно также включает имя исключения в дополнение к его сообщению (которое может быть пустым).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...