Apache: настроить «отладку LogLevel» только для определенных модулей?

13

Я хочу отладить некоторые проблемы аутентификации и авторизации на моем веб-сервере, особенно с mod_authnz_ldap и другими модулями mod_auth *.

Поэтому я установил LogLevel debugв конфигурации Apache глобально или для одного VirtualHost. Это дает мне полезную информацию от mod_authnz_ldap, но также извергает кучу шума из модулей SSL. Смотрите ниже пример.

Есть ли способ уменьшить LogLevel для ssl_engine *, сохраняя при этом уровень логирования для mod_authnz_ldap?

Да, я мог бы исключить строки, используя что-то вроде grep -v ssl_engine logfile, но я также хочу исключить эти дополнительные данные из некоторых других инструментов синтаксического анализа системного журнала. Я бы предпочел сократить ведение журнала из источника, а не исключать его в месте назначения.

[Tue Jul 06 16:55:31 2010] [debug] ssl_engine_io.c(1830): | 0100: 12 23 e7 0f 45 1f 1f d3-ed 12 f8 12 1f a9 90 85  .+..(........... |
[Tue Jul 06 16:55:31 2010] [debug] mod_authnz_ldap.c(474): [client 10.10.10.123] [96991] auth_ldap authenticate: accepting joe
[Tue Jul 06 16:55:31 2010] [debug] mod_authnz_ldap.c(730): [client 10.10.10.123] [96991] auth_ldap authorise: require group: authorisation successful (attribute memberUid) [Comparison true (cached)][Compare True]
[Tue Jul 06 17:02:17 2010] [debug] ssl_engine_io.c(1830): | 0023: 23 ff 29 5a 4b bd 4c e6-bc 36 22 9c c3 22 c2 4b  ..)ZK.L..6u....K |
[Tue Jul 06 17:02:17 2010] [debug] ssl_engine_io.c(1830): | 0023: 23 ff 29 5a 4b bd 4c e6-bc 22 75 9c c3 b6 22 4b  ..)blahblah|
Стефан Ласевский
источник

Ответы:

16

Я отвечаю на свой собственный вопрос, Jeopardy Style.

Apache 2.3

Это возможно в Apache 2.3.

Apache> HTTP-сервер> Документация> Версия 2.4> Ведение журнала для каждого модуля говорит:

Ведение журнала модуля

Директива LogLevel позволяет вам указывать уровень важности журнала для каждого модуля. Таким образом, если вы устраняете проблему только с одним конкретным модулем, вы можете увеличить его объем журналирования, не получая также информацию о других модулях, которые вас не интересуют. Это особенно полезно для таких модулей, как mod_proxy или mod_rewrite где вы хотите узнать подробности о том, что он пытается сделать.

Сделайте это, указав имя модуля в вашей директиве LogLevel:

LogLevel info rewrite:trace5

Это устанавливает для основного LogLevel значение info, но превращает его в trace5 для mod_rewrite.

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

Обзор новых функций в Apache HTTP Server 2.4 гласит:

Конфигурация LogLevel для каждого модуля и для каждого каталога Теперь LogLevel можно настроить для каждого модуля и для каждого каталога. Новые уровни от trace1 до trace8 были добавлены выше уровня журнала отладки.

Также смотрите обсуждение в списке рассылки Apache-dev .

Apache 2.2 и более ранние версии:

Нет, в настоящее время это невозможно в Apache 2.2. Руководство по HTTP Server> Документация> Версия 2.2> Модули "Директива LogLevel" не показывает эту опцию. Единственный вариант в настоящее время - "grep -v" оскорбительных строк.

Apache 2.4 (предлагается на момент написания):

Это будет включено в Apache 2.4. Документы Apache в багажнике (2.3) в настоящее время говорят:

Совместимость: Конфигурация для каждого модуля и для каждого каталога доступна в Apache HTTP Server 2.3.6 и более поздних версиях.

И:

Указание уровня без имени модуля приведет к сбросу уровня для всех модулей до этого уровня. Указание уровня с именем модуля установит уровень только для этого модуля. Можно использовать имя исходного файла модуля, идентификатор модуля или идентификатор модуля с конечным _module, опущенным в качестве спецификации модуля. Это означает, что следующие три спецификации эквивалентны:

LogLevel info ssl:warn
LogLevel info mod_ssl.c:warn
LogLevel info ssl_module:warn
Стефан Ласевский
источник