Мне нужно выполнить несколько действий для некоторых сообщений журнала. Например, я хочу записывать их в разные файлы в соответствии с серьезностью.
Все нормально, если я использую это:
if $programname == 'myprog' then -/var/log/myprog.log
if $programname == 'myprog' and $syslogseverity-text >= 'warning' then -/var/log/myprog-alert.log
if $programname == 'myprog' ~
В этом журнале регистрируются все сообщения, отправленные myprog, в /var/log/myprog.log
Это только предупреждение и сообщение об ошибке, отправленное myprog в - / var / log / myprog-alert.log
Затем обработка останавливается (благодаря '~')
.
Я хочу иметь что-то более сексуальное:
if $programname == 'myprog' then {
*.* -/var/log/myprog.log
*.warning -/var/log/myprog-alert.log
~
}
Но эта более поздняя конструкция, хотя и принятая rsyslog, не фильтрует имя программы.
Например, все сообщения записываются в /var/log/myprog.log, даже если они исходят из любого процесса.
.
Кто-нибудь может объяснить, в чем моя ошибка или недоразумение?
.
Окончательный метод, из ответов ниже:
используйте "современный" rsyslogd. Версия> 7.x.y
используйте этот синтаксис:
if $programname == 'myprog' then {
*.warning -/var/log/myprog-alert.log
*.* -/var/log/myprog.log
*.* stop
}
или этот:
if $programname == 'myprog' then {
*.warning -/var/log/myprog-alert.log
-/var/log/myprog.log
stop
}
За документы rsyslog для фильтров и RanierScript, многострочный синтаксис {..} не поддерживается. Парсер Rsyslog не часто выдает ошибки, предпочитая просто игнорировать проблемы или интерпретировать их не так, как вы предполагали. Ваш "более сексуальный" пример, вероятно, выполняет {
действие для событий, соответствующих "myprog" (и я не могу найти такое действие, поэтому подозреваю, что это означает "ничего не делать"). Вторая и третья строки обрабатываются как устаревшая конфигурация системного журнала, а четвертая и пятая - недействительны (так что опять же, вероятно, "ничего не делать")
Ваша строка, содержащая только "~", неверна. Это должно быть «*. * ~».
Я знаю, что вы в основном используете стабильный Debian. У вас версия rsyslog 5.x.y и не поддерживает RanierScript.
Вы можете выполнить обновление до версии backports (в настоящее время 7.6.3), тогда ваш второй пример должен работать.