Rolling log file sem perder nenhum evento de log

1

Eu tenho um arquivo de 8GB chamado php.log com um script php em execução. É importante para mim que eu registre cada evento, e eu quero compactá-lo e esvaziar o arquivo atual sem parar o servidor web.

Se eu correr:

    mv php.log php.log.backup20140305-01
    touch php.log

Vou perder alguns dos dados. Como posso fazer isso sem perder nenhum dado?

    
por Mohammad Jolani 05.03.2014 / 16:33

2 respostas

5

Você achará mais fácil configurar logrotate para fazer a rotação para você. Se você criar um arquivo chamado /etc/logrotate.d/php contendo algo como o seguinte, ele manipulará a rotação do log automaticamente. Este é apenas um guia, portanto, teste e personalize-o antes de colocá-lo em produção.

/path/to/php.log {
    daily  
    missingok              # don't rotate if the file isn't there...
    notifempty             # ...or if it's zero-length
    rotate 30              # keep 30 days' worth of logs
    compress               # gzip the logs, but...
    delaycompress          # ...only after they're over a day old
    create 640 root adm    # permissions with which to create new files
    sharedscripts
    postrotate
        /etc/init.d/apache2 graceful    # or whatever makes your process let go of the log file
    endscript
}

NB: os comentários nesta extração quebram a sintaxe logrotate , portanto, certifique-se de removê-los do seu arquivo de configuração ao vivo.

    
por 05.03.2014 / 16:39
0

Você deve estar usando o logrotate como o Flup disse, mas uma maneira rápida de achatar / truncar um arquivo de log sem quebrar as alças de arquivo atuais é esta:

> /path/to/php.log

Esteja ciente de que você perderá dados ao fazer isso, então você deve apenas truncar se tiver certeza de que os dados estão em outro lugar, mas é um truque útil quando você não se importa muito com isso o conteúdo de um arquivo de log e você tem um processo ininterrupto escrevendo para ele.

    
por 05.03.2014 / 18:13