Логирование в Java

1,00
р.
Встречал на просторах интернета следующую цитату:
Логирование должно быть грамотным. За System.out.println для вывода логов начинающим программистам уже через неделю обучения следует отрубать руки.
Подскажите, как в Java правильно оформить логирование в оффлайн приложениях, на tomcat и в других случаях (насколько я знаю там разные комманды записи в лог). Как выбирать приоритеты сообщений? Есть ли какое-та внегласная договорённость каким сообщениям, какой приоритет ставить? Стоит ли с приоритетом ниже, стоящего в настройках, печатать в лог вобще все действия, которые происходят (т.е. пароль прошёл проверку, выбран такой-то пункт меню, создание нового экземпляра такого-то класса прошло успешно и т.п. - т.е. иными словами всю мелочь на случай необходимости поиска ошибки)?


Ответ
"Команды записи в лог" зависят не от приложения, а от используемой библиотеки для логирования. Уровни логирования (приоритеты сообщений) выбираются исходя из здравого смысла. Вообще имена самих уровней логирования довольно говорящие. Например на уровне ERROR - пишем ошибки, из-за которых невозможно дальнейшая работа программы, а на уровне TRACE - пишем подробную отладочную информацию. Стоит. Одно дело приложение в продакшне, и тогда избыточное логирование не нужно, и совсем другое дело разработка и тестирование. Разница между девелоперским и продакшн окружением при этом будет состоять в конфигурации логера.
Это не единственные вопросы, на которые вы должны обратить внимание. Неизбежно всплывут вопросы совместимости логеров используемых в разных библиотеках, а также проблемы производительности (логирование не бесплатно).