对于我的日志文件,我只有一个(或几个)文件使用相同的configuration,其余的都有另外一个。 我试图通过给所有文件进行一般configuration,然后在稍后覆盖less数特定文件的configuration来实现这一点,例如:
/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
我该如何处理这种情况? 我当然不想单独列出大量的标准日志文件,所以使用通配符configuration对我来说似乎是合理的。 但是我怎么才能在通配符文件中指定一个exception呢?
最优雅的答案是把thatonespecial.log放在一个单独的目录下,这样就不能匹配通配符。
如果这不起作用,那么你可以使用globs来缩小你的通配符。 这是混乱的,但如果你绝对不能移动文件位置,那么它可能是你唯一的真正的select。 像这样的东西:
/var/log/mylogs/[!t][!h]*.log
将匹配任何.log文件,其名称中至less有2个字符,不以“th”开头。
规则的重写似乎已经实施了,现在起作用了:
$ 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)上testing时,出现错误:
$ 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 ...
如果您知道所有日志的名称,则还可以按照一个规则将它们一起指定:
/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 }