Для моих файлов журнала проблема состоит в том, что все файлы, кроме одного (или нескольких), используют одну и ту же конфигурацию, а остальные имеют другую. Я попытался понять это, задав общую конфигурацию для всех файлов, а затем перезаписав эту конфигурацию для нескольких конкретных файлов, например:
/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
Как мне правильно поступить в такой ситуации? Я, конечно, не хочу перечислять большое количество стандартных файлов журнала по отдельности, поэтому использование конфигурации с подстановочными знаками кажется мне разумным. Но как я могу указать исключение среди файлов с подстановочными знаками?
Самый элегантный ответ - поставить thatonespecial.log
в отдельном каталоге, чтобы он не соответствовал подстановочному знаку.
Если это не сработает, вы можете использовать шарики чтобы сузить подстановочный знак. Это беспорядочно, но если вы абсолютно не можете переместить файл, это, вероятно, ваш единственный реальный вариант. Что-то вроде этого:
/var/log/mylogs/[!t][!h]*.log
Соответствует любым файлам .log, в имени которых содержится не менее 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) возникла ошибка:
$ 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
}