Вопрос немного длинный! Позвольте мне объяснить на примере ниже. я
иметь файл конфигурации ротации журналов в /etc/logrotate.d/
который используется для uwsgi:
"/var/log/uwsgi/*.log" "/var/log/uwsgi/*/*.log" {
copytruncate
daily
rotate 5
compress
delaycompress
missingok
notifempty
}
Допустим, у меня около 12 модулей uwsgi, и я хочу сохранить один файл журнала приложения uwsgi больше, чем другие, поэтому у меня есть конфигурация, как показано ниже:
/var/log/uwsgi/app/MY_APP.log {
daily
missingok
rotate 60
compress
delaycompress
notifempty
create 0640 www-data adm
}
Теперь вопрос в том, как мне создать ротацию журнала, как указано выше, и сохранить *
для 11 других модулей. Я не хочу создавать ротацию 11 журналов с одинаковой конфигурацией. Что мне делать, чтобы перезаписать только один модуль?
Во-первых, у logrotate нет простого способа переопределить существующее совпадение глобуса файла. Простая попытка добавить более конкретное совпадение позже в конфигурации даст вам сообщение об ошибке.
Итак, чтобы обойти это, есть два основных способа.
Первый самый простой: поместите журналы, которые требуют другой обработки, в другой каталог. Таким образом, вы даже можете упростить изменение конфигурации, просто сделав журнал приложения в другом каталоге. Пример:
"/var/log/uwsgi/*.log" "/var/log/uwsgi/keep05/*.log" {
copytruncate
daily
rotate 5
compress
delaycompress
missingok
notifempty
}
"/var/log/uwsgi/keep60/*.log" {
daily
missingok
rotate 60
compress
delaycompress
notifempty
create 0640 www-data adm
}
Второй способ было бы создать исключение в первом глобусе - тот, который соответствует всем 12 журналам. Но поскольку у logrotate нет простого способа исключить конкретный файл, у вас остается то, что предоставляет стандартная библиотека сопоставления имен файлов, а это, по сути, всего лишь один символ в имени файла. Если вы установили правило, согласно которому журналы, которые необходимо хранить в течение 60 дней, должны начинаться с 6, а другие журналы не могут начинаться с 6, вы можете сделать следующее:
"/var/log/uwsgi/*.log" "/var/log/uwsgi/*/[!6]*.log" {
copytruncate
daily
rotate 5
compress
delaycompress
missingok
notifempty
}
"/var/log/uwsgi/app/6*.log" {
daily
missingok
rotate 60
compress
delaycompress
notifempty
create 0640 www-data adm
}
Рекомендую первую версию; Вероятно, проще всего будет отслеживать, добавляете ли вы дополнительные приложения или когда это произойдет.