Apache: Configurar "LogLevel debug" apenas para determinados módulos?

13

Desejo depurar alguns problemas de autenticação e autorização no meu servidor da web, principalmente com o mod_authnz_ldap e outros módulos mod_auth *.

Então, defino LogLevel debugna configuração do Apache, globalmente ou para um único VirtualHost. Isso me fornece informações úteis do mod_authnz_ldap, mas também gera muito ruído dos módulos SSL. Veja abaixo um exemplo.

Existe uma maneira de reduzir o LogLevel para ssl_engine *, mantendo o nível de log para mod_authnz_ldap?

Sim, eu poderia excluir as linhas usando algo como grep -v ssl_engine logfile, mas também quero excluir esses dados extras de algumas outras ferramentas de análise de syslog. Prefiro reduzir o log da fonte, em vez de excluí-lo no destino.

[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|
Stefan Lasiewski
fonte

Respostas:

16

Estou respondendo minha própria pergunta, Jeopardy Style.

Apache 2.3

Isso é possível no Apache 2.3.

Apache> Servidor HTTP> Documentação> Versão 2.4> O log por módulo diz:

Registro por módulo

A diretiva LogLevel permite especificar um nível de gravidade do log por módulo. Dessa maneira, se você estiver solucionando um problema com apenas um módulo específico, poderá aumentar o volume de log sem obter os detalhes de outros módulos nos quais não está interessado. Isso é particularmente útil para módulos como mod_proxy ou mod_rewrite onde você deseja saber detalhes sobre o que está tentando fazer.

Faça isso especificando o nome do módulo na sua diretiva LogLevel:

LogLevel info rewrite:trace5

Isso define o LogLevel principal como info, mas aumenta para trace5 para mod_rewrite.

Isso substitui as diretivas de log por módulo, como RewriteLog, presentes em versões anteriores do servidor.

A visão geral dos novos recursos do Apache HTTP Server 2.4 diz:

Configuração de LogLevel por módulo e por diretório O LogLevel agora pode ser configurado por módulo e por diretório. Novos níveis trace1 para trace8 foram adicionados acima do nível do log de depuração.

Veja também a discussão na lista de discussão Apache-dev .

Apache 2.2 e versões anteriores:

Não, isso atualmente não é possível no Apache 2.2. O manual em Servidor HTTP> Documentação> Versão 2.2> Módulos "Diretiva LogLevel" não mostra esta opção. A única opção atualmente é "grep -v" as linhas incorretas.

Apache 2.4 (proposto no momento da redação):

Isso será incluído no Apache 2.4. Os documentos do Apache no porta-malas (2.3) dizem atualmente:

Compatibilidade: A configuração por módulo e por diretório está disponível no Apache HTTP Server 2.3.6 e posterior

E:

A especificação de um nível sem o nome do módulo redefinirá o nível de todos os módulos para esse nível. A especificação de um nível com um nome de módulo definirá o nível somente para esse módulo. É possível usar o nome do arquivo de origem do módulo, o identificador do módulo ou o identificador do módulo com o _module à direita omitido como especificação do módulo. Isso significa que as três especificações a seguir são equivalentes:

LogLevel info ssl:warn
LogLevel info mod_ssl.c:warn
LogLevel info ssl_module:warn
Stefan Lasiewski
fonte