Adicionando “URL” acessada ao log de erros do Apache

6

Estamos recebendo "Memória permitida esgotada com PHP", onde o PHP está pedindo Gigabytes de memória. Como posso formatar o log de erros do Apache para ver qual URL ele estava acessando?

    
por Rishav 26.05.2014 / 08:53

3 respostas

4

retirado do arquivo padrão debian apache2.conf:

# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
# If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i
#
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

Veja Manual do Apache 2 para saber o significado dos diferentes formatos de sinalização% ou Diretiva do Apache 2 Manual ErrorFormat por ter o log de erro em um formato específico desde apache 2.4 também.

em resumo:

Defina o formato de saída no seu arquivo de configuração principal e o arquivo de saída, por exemplo, por vhost na Diretiva VirtualHost. Você também pode definir o arquivo de configuração para todos os seus sites no arquivo principal, se quiser.

algo como seria necessário adicionar (caso ainda não esteja lá):

    LogLevel warn

    CustomLog /var/log/apache2/access.log combined
    ErrorLog /var/log/apache2/error.log

Dependendo da sua configuração exata, você pode querer alterar um pouco a localização.

Não se esqueça de logrotá-los se você tiver um site de alto tráfego.

Normalmente, isso deve ser (pelo menos no Debian) a configuração padrão de como eu me lembro.

Se você tem logs vazios, você pode querer verificar as permissões da pasta / arquivos para que o usuário no qual o processo apache2 é executado possa acessar e escrever para eles.

Lembre-se de que um reload do processo é (pelo que eu sei) necessário para reler os arquivos de configuração.

    
por 26.05.2014 / 10:31
6

A resposta aceita não responde à pergunta original enquanto registra no access.log e não no error.log

você precisa colocar o url em uma variável de ambiente e chamá-lo de ErrorLogFormat assim:

SetEnvIf Request_URI "(^.*$)" RURI=$1
ErrorLogFormat "%{cu}t %a %l %M URI:%{RURI}e"
    
por 14.08.2015 / 06:02
0

Eu tenho o mesmo problema. Quando você olha seu log de erros e quer saber qual URL o acionou.

  1. ErrorLogFormat está disponível apenas no Apache 2.4

  2. O token de log para log personalizado e log de erros são diferentes, você não pode simplesmente usar o token de log personalizado e colocá-lo em ErrorLogFormat

    Token ErrorLogFormat: link

    Token do CustomLog: link

  3. Talvez seja possível usar a variável e colocá-la no ErrorLogFormat, mas, para meu próprio teste, não consegui fazer isso funcionar.

    e.g.
    SetEnvIf Request_URI "(^.*$)" RURI=$1
    SetEnvIf QUERY_STRING "(^.*$)" QSTRING=$1
    ErrorLogFormat "%t [URI:%{RURI}e] [QSTRING:%{QSTRING}e] %M"
  1. Por fim, a maneira "correta" é usar o token LogID e fazer referência a ele a partir do CustomLog
    e.g.
    LogFormat "[LogID: %L] %t \"%r\" %h" custom-with-id
    ErrorLogFormat "[LogID: %L] %t %M"

Espero que ajude

    
por 02.06.2018 / 06:06