Назад | Перейти на главную страницу

синтаксис конфигурации rsyslog

Мне нужно выполнить несколько действий для некоторых сообщений журнала. Например, я хочу записывать их в разные файлы в соответствии с серьезностью.

Все нормально, если я использую это:

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), тогда ваш второй пример должен работать.