Приводится на хабре в статье библиотека Apache Commons Logging (не знаю смысл этой библиотеки, не юзал) и комментарий:
За System.out.println
для вывода логов начинающим программистам уже через неделю обучения следует отрубать руки.
Так вот вопрос: а почему print
настолько плох?
P.S. Сам я основы языка очень плохо знаю.
Логирование - это все-таки больше, чем вывод строк в консоль. Здесь имеют место следующие параметры:
{processed user id: 12345}
Logger.debug("Transaction #{} has failed with message '{}'", transaction.getId(), e.getMessage())
гораздо удобнее, чем писать System.out.ptintln("Transaction #" + transaction.getId() + " has failed with message '" + e.getMessage() + "'")
. Кроме удобства, это позволяет не конкатенировать строки, если уровень логирования выше самого сообщения (т.е. при уровне INFO сообщения с уровнем DEBUG не будут тратить ресурсы на конкатенацию) и группировать лог-сообщения по шаблону (искать в логах вместо просто слова "transaction" конкретный шаблон).Всем этим занимается библиотека логирования, и она сильно упрощает жизнь, когда нужно перейти от одной модели к другой, например, когда логи возле приложения хранить стало нецелесообразно, для переключения на удаленный сервер достаточно подключить новый аппендер и перезапустить приложение. Кроме того, существует ситуация, когда логов настолько много, что I/O не успевает справляться - о проблемах такого рода, как правило, не думают вплоть до их появления, а в библиотеках (я надеюсь) некоторые предусмотрительные шаги уже сделаны (например, logback совершенно точно по умолчанию пытается добавить сообщение пять раз на тот случай, если что-то пошло не так).
По сути, выше уже всё было сказано, добавлю ещё один практический аспект. Консоль имеет определённую емкость. И, например, если она равна 300 строк, то в случае, если в неё запишутся 500 строк, начальные 200 строк вы уже не увидите. Можно, конечно, увеличить размер буфера консоли, но тогда придётся его увеличивать постоянно, а это не лучший вариант. Особенно для большого проекта, где логи записываются практически непрерывно, и логируется большой объём данных.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Сегодня приступил к изучению многопоточности на java, не понимаю, почему программа в некоторых случаях выдает корректный результат, а в остальных...
В общем, проблема в том что при SQL запросе на update записи не возвращаются generated keys, хотя запись обновляется, с insert все работает корректно, а вот...
У меня есть две таблицы stock и productТаблицу я инициализирую через stock, но фильтр мне нужно сделать через product
Этот вопрос является развитием темы Java: обойти необходимость невозможного изменения значения локальной переменной извнеИз ответов на вопрос...