Como posso rotacionar arquivos de log do PHP no Windows Server 2003?

3

Nossos arquivos de log do PHP estão ficando enormes, e precisamos de um utilitário para girar o arquivo regularmente. Isso está em um servidor Windows 2003.

Existe um programa / script semelhante ao logrotate ? do Linux?

E sim, estamos ocupados revisando os scripts PHP para remover todos os erros, avisos e avisos.

    
por Jrgns 25.05.2009 / 05:29

5 respostas

3

Se você estiver usando o Apache para rodar o PHP, então existe um utilitário embutido chamado rotatelogs que você pode canalizar seus logs e fará automaticamente a rotação do log para você. Aqui está como você o usa no Windows:

ErrorLog "|bin/rotatelogs.exe -l logs/error/error.%Y-%m-%d.log 86400"

Outra alternativa é definir o local do log de erros do PHP em tempo de execução para um arquivo que inclua a data, ou seja, adicione isso ao seu arquivo prepend:

ini_set('error_log', 'path_to_logs/php_error.'.date('Y-m-d').'.log');
    
por 11.07.2009 / 09:54
0

Eu conheço sua dor. Vários anos atrás, eu acabei lendo a fonte para logrotate, e portei para o Windows (traduzindo de C para Perl no processo - sim, eu sou um glutão para punição).

O principal problema com a rotação de logs do Windows é o bloqueio de arquivos. Se um arquivo estiver aberto durante a rotação, ele não poderá ser movido, renomeado, etc. Eu decidi que, para minha aplicação, a rotação era mais importante do que algumas linhas de log perdidas e simplesmente fazer uma cópia, então truncate (embora, eu tenho certeza que houve mais do que isso, infelizmente eu não tenho a fonte prontamente disponível). De qualquer forma, a operação foi tão rápida que duvido muito que tenhamos perdido mais do que algumas linhas na história de seu uso.

Acredito que, por isso, os aplicativos nativos do Windows geralmente fazem sua própria rotação de log - o próprio aplicativo mantém os bloqueios e pode armazenar em cache as mensagens de log enquanto a rotação ocorre, para uma limpeza posterior.

    
por 25.05.2009 / 07:41
0

O melhor método, na minha experiência, é desabilitar o log interno do PHP e fazer com que ele registre no log de erros do Windows (ou syslog em hosts unix).

Uma vez lá, o ntsyslog ou similar pode colocar os logs em um host * nix, onde ferramentas como o logwatch facilitam a filtragem.

    
por 25.05.2009 / 16:08
0

Eu não uso PHP, mas com o SQUID eu tenho um arquivo de lote que é executado à meia-noite e para o SQUID, renomeia o arquivo de log e reinicia o SQUID. Para gerar o nome do arquivo, use algo como:

for /f "tokens=1" %%i in ('date /t') do set THEDATE=%%i
set THEDAY=%THEDATE:~0,2%
set FILENAME=Squid-%THEDAY%.log

Este é o formato de data do Reino Unido, onde o dia são os dois primeiros caracteres. Você pode escolher qualquer parte da data apenas alterando a segunda linha.

JR

    
por 28.05.2009 / 09:14
0

Eu uso o utilitário " rnanalog " para girar meus registros do Perforce, eu uso o comando:

C:\Support\Scripts\rnanalog.exe C:\Data\p4journal\audit.log C:\Data\p4backups\audit.logs\audit_mmmddccyy.log

em um arquivo em lotes e simplesmente executá-lo à meia-noite por meio de uma tarefa agendada.

Se o bloqueio de arquivos for um problema, talvez seja necessário parar o serviço por alguns segundos enquanto o registro é girado ...

    
por 27.06.2009 / 01:39