如何在logrotate配置文件中指定通配符设置的例外?


6

对于我的日志文件,除了一个(或几个)文件都使用相同的配置外,其余文件都有另一个配置。我尝试通过为所有文件提供通用配置,然后在以后覆盖一些特定文件的配置来实现这一目标,例如:

/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
}

但是,这会引发错误:

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

我应该如何正确处理这种情况?我当然不想单独列出大量标准日志文件,因此对我来说,使用通配符配置似乎很合理。但是,如何在通配文件之间指定例外?

Answers:


9

最优雅的答案是放在thatonespecial.log一个单独的目录中,这样就无法匹配通配符。

如果这样不起作用,则可以使用glob缩小通配符的范围。这很麻烦,但是如果您绝对不能移动文件位置,那么它可能是您唯一的选择。像这样:

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

将匹配名称中至少以“ th”开头的至少两个字符的任何.log文件。


这不符合预期。文件that.log名将被忽略,但文件名txxx.log也将被忽略。由于某些原因,该[!h]零件没有发挥任何作用。只要文件以开头t,那么它将被忽略。
cherouvim

3

似乎覆盖了规则,并且现在可以正常工作:

$ 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.

当在本地logrotate(版本3.7.8)上进行测试时,引发了错误:

$ 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

...

1

如果知道所有日志的名称,则也可以在一条规则中一起指定它们:

/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
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.