Onde o PHP armazena o log de erros? (php5, apache, fastcgi, cpanel)

392

Estou em hospedagem compartilhada e tenho Cpanel, Apache, PHP é executado por fastcgi. Onde o PHP armazena o log de erros?

Existe alguma outra maneira de encontrar o log de erros no ambiente de hospedagem compartilhada, em vez de ter que percorrer toda a estrutura do site para procurar arquivos error_log?

Eu tenho acesso ao php.ini(estou usando o PHP versão 5.2.16).

PHPLOVER
fonte
25
No Linux, /var/log/httpd/error_logou /var/log/apache2/error.log. Esses arquivos são de propriedade do root, portanto, você precisa ser root ou usá sudo-lo para vê-lo ou lê-lo.
Eric Leschinski
112
php --info | grep error
sjas
8
Para quem procura uma solução para Windows, use php --info | findstr /r /c:"error_log"para ver onde está o arquivo de log.
Boom
11
É muito estranho para mim ... hospedei o site e os logs do PHP são armazenados no mesmo arquivo dos logs do Apache ... No meu painel de administração, nos logs, há uma opção para mostrar o log de erros completo do Apache, quando clico nele, há erros sobre usuários entrando em lugares onde não deveriam, por exemplo. Mas, também, no mesmo arquivo, há erros que o PHP mostrou.
RedClover 12/03
@soaku se você usar o fastcgi, o apache não executa PHP. Quando você usa mod_php que é o módulo apache, o apache lida com php. Que os erros meios podem e provavelmente será no Apache logs quando usando mod_php, mas isso não vai ser um caso quando se usa cgi ou fastcgi
Gall Annonim

Respostas:

314

O PHP armazena os logs de erro /var/log/apache2se o PHP for um módulo apache2. Os hosts compartilhados geralmente armazenam arquivos de log na /logsubpasta do diretório raiz . Mas ... se você tiver acesso a um php.iniarquivo, poderá fazer o seguinte:

error_log = /var/log/php-scripts.log

De acordo com o comentário de rinogo : Se você estiver usando o cPanel, o arquivo de log principal que você provavelmente está procurando é armazenado (por padrão) em

/usr/local/apache/logs/error_log

Se tudo mais falhar, você pode verificar o local do arquivo de log usando

<?php phpinfo(); ?>
Adam Arold
fonte
20
"Php armazena logs de erro em / var / log / apache2 se php for um apache2" não no RHEL etc, onde o nome do pacote é 'httpd'. Não se pode realmente assumir que o nome de um pacote seja consistente nas distribuições.
Chelmertz 14/05/2019
28
FYI para Googlers - Se você estiver usando cPanel, o arquivo de log mestre que você está procurando provavelmente é armazenado (por padrão) a/usr/local/apache/logs/error_log
rinogo
5
mas verifique a seção 'error_log' de <?php phpinfo(); ?>para confirmar o caminho
duplex1
e se não for um módulo apache2. por exemplo, pode ser um pacote fpm do debian em execução no nginx.
N611x007
2
onde na seção phpinfo irá mostrar? em error_log tudo que eu vejo para chave / valor é 'error_log' e nenhum caminho real
Robert Sinclair
86

Experimente phpinfo()e verifique "error_log"

chelmertz
fonte
13
Apenas diz error_log nenhum caminho especificado. Eu acho que talvez porque esteja em um ambiente de hospedagem compartilhada e, se tivéssemos acesso a ele, veríamos todos os outros erros do site.
PHPLOVER 26/02
8
@PHPLOVER diz a mesma coisa se você tentar echo ini_get('error_log');?
28411 chelmertz
Eu não tentei isso, mas ele disse o mesmo no arquivo php.ini, então o que eu fiz foi alterar o caminho no arquivo php.ini e verifiquei se ele estava funcionando e está. Ele ainda registra todos os erros, embora eu tenha alterado o caminho para registrar erros (fora da raiz do documento)? Obrigado phplover
PHPLOVER 26/02
2
@PHPLOVER: você pode facilmente controlar o nível de relatório com a definição error_reporting(E_ALL|E_STRICT);se.php.net/manual/en/function.error-reporting.php
chelmertz
3
O meu também diz error_log, não faço ideia de onde procurá-lo. Isso atinge o número um no google, mas não responde.
HMR 10/06
54

Linux

php --info | grep error 

O terminal exibirá o local do log de erros.

janelas

php --info | findstr /r /c:"error_log"

O prompt de comando exibirá o local do log de erros

Para definir o local do log

Abra o seu php.inie adicione a seguinte linha:

error_log = /log/myCustomLog.log

Obrigado @chelmertez , @Boom por estes (comentários sobre a pergunta).

Cullub
fonte
5
Estou no Linux. isso não menciona um local de log para mim.
Sirex
11
@Sirex produz php -infoalguma coisa? Você precisa ter certeza phpse realmente chamando PHP para executar ...
Cullub
11
Além disso, é possível que o php não esteja registrando nada no momento. Se for esse o caso, você pode abrir os erros php.inie definir error_reportingcomo E_ALL & ~E_DEPRECATED & ~E_STRICT, ou quaisquer erros que queira ver, e defina error_logo caminho para o diretório em que deseja que seus erros sejam registrados. (Nota: este não é um caminho completo para um arquivo, só para um diretório.)
Cullub
11
Eu só encontrei logs antigos em / var / log / httpd /, onde a maioria das pessoas recomenda procurar, mas a execução php --info | grep logme indicou / var / www / logs onde os logs mais recentes estavam localizados.
22417 ChrisBob
11
Depois de definir o local de log, não se esqueça de reiniciar o Apache:sudo /etc/init.d/apache2 restart
BrianHenryIE
31

Em um ambiente LAMP, os erros de php são direcionados por padrão para este arquivo abaixo.

/var/log/httpd/error_log

Todos os logs de acesso estão em:

/var/log/httpd/access_log
aliado
fonte
Então, comente a especificação do arquivo de log de erros php e ela simplesmente escreverá aqui?
Utilizador
17

Como encontrar o log de erros do PHP no Linux:

eric@dev /var $ sudo updatedb
[sudo] password for eric:
eric@dev /var $ sudo locate error_log

/var/log/httpd/error_log

Outra maneira equivalente:

eric@dev /home/eric $ sudo find / -name "error_log" 2>/dev/null

/var/log/httpd/error_log
Eric Leschinski
fonte
12

Parece que, por padrão, o php não registra erros em nenhum lugar, a error_logchave no php.ini é comentada em todas as instalações que eu já vi.

Geralmente eu:

  1. procure por arquivos php.ini. locate php.ini.
  2. Pesquise esses arquivos pelo error_reportingvalor;

    O que deve ser definido para qualquer amálgama de níveis de log php que seja suficiente para você. ,

    Por exemplo: E_ALL & ~E_DEPRECATED & ~E_STRICT

  3. Verifique o error_logvalor para garantir que ele aponte para um local real e não seja comentado.

    O valor padrão não fornece um caminho completo, apenas um nome de arquivo, não sei para onde esse caminho é resolvido normalmente. Provavelmente /var/log/.

ThorSummoner
fonte
11

Você deve usar o caminho absoluto ao definir a variável error_log no seu arquivo php.ini, caso contrário, os logs de erros serão armazenados de acordo com o seu caminho relativo.

error_log = /var/log/php.errors

Outra solução seria escrever um script simples que listaria todos os arquivos de logs de erros da árvore de diretórios.

mailo
fonte
10

Também pode ser /var/log/apache2/error.logse você estiver no mecanismo de computação do google.

E você pode ver a cauda assim:

tail -f /var/log/apache2/error.log
Vivek
fonte
5

Se você construiu o Apache e o PHP a partir da fonte, os logs de erro por padrão são gerados ${Apache install dir}/logs/error_lognormalmente /usr/local/apache2/logs/error_log. Caso contrário, se você o instalou a partir do repositório, você o encontrará em /var/log/apache2/error_log. Você pode definir o caminho no seu php.initambém e verificá-lo invocando phpinfo().

Abhishek
fonte
5

A melhor maneira é procurar no seu arquivo httpd.conf e ver qual é o padrão. Também pode ser substituído pelo seu host virtual específico. Começo olhando /etc/httpd/conf/httpd.confou /etc/apache2/httpd.confprocuro error_log. Ele pode ser listado como / var / log / httpd / error_log ou /var/log/apache2/error_logtambém pode ser listado de maneira simples logs/error_log.

Nesse caso, é um caminho relativo, o que significa que estará abaixo /etc/httpd/logs/error_log. Se você ainda não conseguir encontrá-lo, verifique a parte inferior do arquivo httpd.conf e veja onde estão os seus hosts virtuais. Pode estar em /etc/httpd/conf.d/<- como "outro" ou "extra". Seu host virtual pode substituí-lo pelo ErrorLog "/ path / to / error_log".

Thomas Bennett
fonte
4

Ao configurar seu arquivo de log de erros no php.ini, você pode usar um caminho absoluto ou um caminho relativo. Um caminho relativo será resolvido com base na localização do script de geração e você obterá um arquivo de log em cada diretório em que possui scripts. Se desejar que todas as suas mensagens de erro sigam para o mesmo arquivo, use um caminho absoluto para o arquivo.

Veja mais aqui: http://www.php.net/manual/en/ref.errorfunc.php#53025

anemone928
fonte
Obrigado, isso resolveu meu problema. Comportamento realmente manco para definições relativas, para ter arquivos de log espalhados por toda a pasta htdocs, e não faço ideia por onde começar a procurar. Eu esperava que fosse relativo à pasta de instalação, como outras configurações. +1.
Eduardo
4

O NGINX normalmente o armazena em /var/log/nginx/error.log ou access.log. (No Ubuntu, em qualquer caso)

DarkNeuron
fonte
4
php --info | grep error

Isso é útil. comentado por sjas em questão. então eu incluí como resposta.

J4GD33P 51NGH
fonte
2
(Parece) isso gera o valor para as configurações da linha de comando do PHP (por exemplo, /etc/php/7.1/cli/php.ini) em vez das configurações do Apache.
214188 Brian HenryIE
3

Se você usar o registro php5-fpm, o padrão deve estar em

/var/log/php5-fpm.log
mateusz.szymborski
fonte
2

onde você quiser, se você definir sua chamada de função: error_log ($ errorMessageforLog. "\ n", 4, 'somePath / SomeFileName.som');

cfphpflex
fonte
2

Pesquise o arquivo httpd.conf ErrorLogexecutando cat <file location> | grep ErrorLogna linha de comandos. Por exemplo:

$ cat /etc/apache2/httpd.conf | grep ErrorLog

Resultado:

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
ErrorLog "/private/var/log/apache2/error_log"

Encontre a linha que começa com ErrorLog a sua resposta.

Nota: Para hosts virtuais, é possível editar o arquivo de hosts virtuais httpd-vhosts.confpara especificar um local diferente para o arquivo de log.

jkdev
fonte
2

Os logs de erro do cPanel estão localizados em:

/ usr / local / cpanel / logs /

/ usr / local / apache / logs /

Por padrão, os logs do Apche estão localizados dentro:

/ var / log / apache

ou

/ var / log / apache2

Se alguém estiver usando o local de log personalizado, você poderá verificá-lo executando este comando:

cat / etc / apache2 / conf /httpd.conf | grep ErrorLog

Se você estiver recebendo um erro de que o diretório apache2 não existe, execute este comando para encontrar o local correto:

onde está apache

ou

whereis apache2

Dewlance
fonte
1
  1. você pode ir na pasta de logs de verificação do Gerenciador de Arquivos.
  2. marque Arquivo de log na pasta public_html.
  3. verifique o arquivo "php phpinfo ()" onde o armazenamento de log.
Mevil Bhojani
fonte
1

Você está no ambiente de compartilhamento e não consegue encontrar o log de erros, sempre verifique se o cPanel tem a opção Erros no painel do cPanel. Se você não conseguir encontrar o log de erros, poderá encontrá-lo lá.

Na barra de pesquisa do cPanel, pesquise Erro, ele exibirá Páginas de erro, que são basicamente listas de diferentes páginas de erro http e outro erro é onde os logs de erro são exibidos.

Outros lugares para procurar em ambiente compartilhado: / home / nome_do_usuário / logs / home / nome_do_usuário / public_html / error_log

Krishna Pariyar
fonte
1

algo assim :

sudo locate error.log | xargs -IX grep -iH "errorlog" X

ou

sudo locate error_log | xargs -IX grep -iH "errorlog" X

ou

sudo find / -iname "error?log" 2>/dev/null | xargs -IX grep -iH "errorlog" X
Freeman
fonte