Como especificar exceções de configurações curinga em um arquivo de configuração logrotate?

3

Para meus arquivos de log, tenho o problema de todos, exceto um (ou alguns) arquivos usarem a mesma configuração, enquanto o resto tem outro. Eu tentei perceber isso, dando uma configuração geral para todos os arquivos e, em seguida, substituindo essa configuração para os poucos arquivos específicos mais tarde, por exemplo:

/var/log/mylogs/*.log {
                   size 1000k
                   copytruncate
                   create 0644 root root
                   rotate 99
                   compress
                   missingok
}

/var/log/mylogs/thatonespecial.log {
                   size 1000k
                   copytruncate
                   create 0644 myuser mygroup
                   rotate 99
                   compress
                   missingok
}

No entanto, isso gera um erro:

error: /var/log/mylogs/logrotate.conf:10 duplicate log entry for /var/log/mylogs/thatonespecial.log

Como devo lidar adequadamente com essa situação? Eu certamente não quero listar o grande número de arquivos de log padrão individualmente, então o uso da configuração curinga parece razoável para mim. Mas como posso então especificar uma exceção entre os arquivos curinga?

    
por MRA 05.02.2015 / 15:14

3 respostas

6

A resposta mais elegante é colocar thatonespecial.log em um diretório separado para que não seja possível corresponder ao curinga.

Se isso não funcionar, você pode usar globs para diminuir seu curinga. É confuso, mas se você absolutamente não pode mover o local do arquivo, provavelmente é sua única opção real. Algo parecido com isto:

/var/log/mylogs/[!t][!h]*.log

Corresponde a todos os arquivos .log com pelo menos dois caracteres em seus nomes que não começam com "th".

    
por 05.02.2015 / 17:19
1

Parece que a sobregravação de regras foi implementada e funciona agora:

$ logrotate --version
logrotate 3.8.7

$ cat /etc/logrotate.d/test
# rotate application logs for 40 days by default
/home/myapp/log/*.log
/home/myapp/log/*/*.log
{
    daily
    compress
    delaycompress
    rotate 40
}

# rotate access logs for 1 year
/home/myapp/log/access/*.log {
    daily
    compress
    delaycompress
    rotate 365
}

$ logrotate  -d /etc/logrotate.d/test
reading config file /etc/logrotate.d/test

Handling 2 logs

rotating pattern: /home/myapp/log/*.log
/home/myapp/log/*/*.log
 after 1 days (40 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.

rotating pattern: /home/myapp/log/access/*.log  after 1 days (365 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.

Enquanto testado no meu logrotate local (versão 3.7.8), o erro foi levantado:

$ cat logr.conf 
# rotate application logs for 40 days by default
/home/myapp/log/*.log
/home/myapp/log/*/*.log
{
    daily
    compress
    delaycompress
    rotate 40
}

# rotate access logs for 1 year
/home/myapp/log/access/*.log {
    daily
    compress
    delaycompress
    rotate 365
}

$ logrotate -d logr.conf 
reading config file logr.conf
reading config info for /home/myapp/log/*.log
/home/myapp/log/*/*.log

error: logr.conf:12 duplicate log entry for /home/myapp/log/access/api_access.log
error: found error in /home/myapp/log/access/*.log , skipping
removing last 1 log configs

...
    
por 01.06.2015 / 12:42
1

Se você souber os nomes de todos os registros, também poderá especificá-los juntos em uma regra:

/var/log/mylogs/{file1,file2,file3,file4,file5}.log {
    size 1000k
    copytruncate
    create 0644 root root
    rotate 99
    compress
    missingok
}

/var/log/mylogs/thatonespecial.log {
    size 1000k
    copytruncate
    create 0644 myuser mygroup
    rotate 99
    compress
    missingok
}
    
por 25.11.2016 / 15:53