Насколько медленны C, F, L, l и M PatternLayout (log4j)?

Общеизвестно, что C, F, L, L и M PatternLayout медленны:

ПРЕДУПРЕЖДЕНИЕ Генерация информации о местоположении вызывающего абонента чрезвычайно медленная, и ее следует избегать, если не будет проблемой скорость выполнения.

Кроме того, в этой книге упоминается, что некоторые приложения могут получать 10% -ную скорость только от изменения формата ведения журнала.

Но вопрос в том, насколько медленны эти символы преобразования?

Ответ 1

Я измерял локально на своем компьютере с помощью FileAppender. Я хорошо проверил тест, измерил множество исполнений и усреднил (относительно последовательные) результаты. Цикл содержал execs++;log.info("t"); Точные цифры не имеют значения (потому что они зависят от моего компьютера), но пропорции. Я использовал log4j-1.2.16.jar на Java 1.6.0_10 (Client VM).

Получается, что всякий раз, когда какой-либо из C, F, L, l or M появился в шаблоне, запись была как минимум в 5 раз медленнее.

enter image description here

Ответ 2

Основная причина, по которой они отмечены как замедленные, заключается в том, что информация, которую они представляют, извлекается путем выброса исключения и анализа трассировки стека исключения.

Когда PatternLayout был разработан, генерация трассировки стека была очень дорогим процессом, поэтому это было справедливое предупреждение. Успехи в JVM-технологии улучшились, поэтому процесс не так дорог. Несмотря на то, что сегодня есть более быстрые методы для получения необходимой информации, это, насколько мне известно, не используется из-за необходимости обратной совместимости с более ранними версиями Java.

Другими словами, это не так плохо, как раньше.

Ответ 3

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

Я использовал их все в производственных приложениях, и они никогда не возникали проблемы, прежде всего потому, что ведение журнала является относительно редким событием. Конечно, эти приложения были связаны с привязкой ввода/вывода (а не к диску/разделу, где велись протоколирования), и на машинах было много циклов процессора (но это были только машины PIII-1133), но это относится к подавляющему большинству (веб-приложений). Я бы использовал их до тех пор, пока профилирование не покажет вам, что регистрация является узким местом и не беспокоится об этом.