У меня есть несколько приложений и скриптов, которые я хочу перенаправить в пользовательские файлы.
Я запускаю эти приложения, используя
command | logger -t TAG
Я хотел бы фильтровать эти сообщения по их тегам и перенаправлять их в разные файлы. Я не хочу использовать перенаправление bash, поскольку эти приложения в основном являются длительными процессами и нуждаются в правильной ротации журналов.
Я попытался добавить собственный фильтр в /etc/rsyslog.d/60-myfilter.conf;
if $syslogtag == 'giomanager' then /var/log/giomanager.log
Что я делаю не так ? Как правильно фильтровать по тегу или есть лучший вариант для получения аналогичного результата?
Я не использовал if like that (или syslogtag), но использовал :<blah>,<condition> ...
(в частности: msg, contains, ...), но попробуйте
:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop
В & stop
(Или, & ~
в rsyslog v6 и старше (например, в RHEL6)) приводит к тому, что совпавшее сообщение отбрасывается после регистрации, в противном случае оно будет проанализировано другими правилами.
Обновление: протестировано и
Системный журнал содержит :
и должен быть заключен в ""
скорее, чем ''
Итак, я наконец нашел решение своей проблемы.
Большое спасибо @lain за то, что мне помогли.
Решение, как указано ранее, состоит в том, чтобы включить ":" в имя тега. Кроме того, и это очень важно, имя файла должно быть перед 50-default.conf
в алфавитном порядке.
Чтобы продолжить, введите следующее 30-giomanager.conf
:
:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop
Обратите внимание, что файл /var/log/giomanager.log
должен быть доступен для записи пользователю системного журнала.
Этот документ redhat подробно описывает, как фильтровать журналы rsyslog и выводить их в отдельные файлы, даже с динамическими именами файлов.