Como posso especificar várias regras para um determinado arquivo (s) de log com o logrotate?

6

Eu tenho um arquivo de configuração logrotate.d parecido com isto:

/home/myapp/log/* {
    daily
    compress
    dateext
    ifempty
    delaycompress
    olddir /home/myapp/baklog
}

Existem alguns arquivos de log específicos em que desejo aplicar regras adicionais, como "email". Como posso aplicar regras adicionais a apenas alguns arquivos?

Se eu adicionar outra regra acima que corresponda aos arquivos adicionais (por exemplo, /home/myapp/log/warning.log { ... } , recebo um erro como error: /etc/logrotate.d/myapp:3 duplicate log entry for /home/myapp/log/warning.log .

Como posso especificar várias regras que correspondem a arquivos específicos de uma maneira que se sobrepõem?

    
por Ether 07.05.2012 / 21:48

2 respostas

2

Como Ether observa, caminhos sobrepostos são intencionalmente proibidos.

Se você deseja e pode executar logrotate com a opção de shell extglob enabled ( shopt -s extglob no ambiente raiz executando crontab logrotate ) ou já está definido (verifique com shopt extglob em o mesmo ambiente), você pode criar exclusões de caminho explícitas, que logrotate.conf não prevê. Você precisaria declarar cada exclusão. É claro que uma solução melhor é reconfigurar o sistema de registro para usar diretórios separados para os arquivos que requerem tratamento especial, se for uma opção.

Com extglob , você pode declarar o seguinte:

/home/myapp/log/!(warning.log) {
    daily
    compress
    dateext
    ifempty
    delaycompress
    olddir /home/myapp/baklog
}

... e o !(warning.log) corresponderá a todos os arquivos, exceto aquele, permitindo que você escreva regras específicas para ele. Isso é confuso e introduz alguma manutenção, então, novamente, é muito melhor se você puder configurar o sistema de log de seu aplicativo para registrar arquivos de log especiais de alta prioridade ou outros em um diretório separado.

    
por 13.05.2015 / 01:17
1

Na maioria das distros, você não pode fazer isso.

Parece que houve uma decisão tomada no Debian que permitir substituições de uma regra para um arquivo específico era ruim porque se tornou comum que instalações de pacotes instalassem erroneamente regras duplicadas e os mantenedores do logrotate queriam marcar isso como um erro.

Portanto, de uma forma ou de outra, seja usando curingas mais específicos ( log/[a-hj-z]* em vez de log/* ), de modo que a regra geral não seja aplicada aos arquivos de log excepcionais ou alterando a configuração do aplicativo para colocá-los arquivos de log excepcionais em um diretório diferente, você precisa resolver isso de forma que não haja várias regras voltadas para o mesmo arquivo de log.

    
por 11.05.2012 / 01:28

Tags