Получение системного журнала для ведения журнала как в системный журнал, так и в пользовательский файл журнала

В системном журнале (Raspbian rsyslog swVersion="8.1901.0"),

Я пытаюсь сопоставить/отфильтровать системное сообщение, содержащее определенную строку, ОБА с /var/log/syslog (по умолчанию) И с настраиваемым отдельным журналом файл, например: /var/log/nut.log.

Мне удалось добиться этого, поместив следующие строки фильтра в /etc/rsyslog.conf:

# NUT logging: Include USB msgs since montoring UPS via only USB
:msg,contains,"USB" /var/log/nut.log
& stop
:msg,contains,"nut-" /var/log/nut.log
& stop

Команда & stop необходима для остановки фильтров матч сделан. Я считаю, что предпочтительнее поместить это в специальный файл, например: /etc/rsyslog.d/0-nut.conf

. Но когда я это делаю, фильтры перестают записывать в / var/log/syslog и исключительно в /var/log/nut.log... ?

Есть ли другой способ сделать это?

Спасибо!

2
задан 12 August 2021 в 14:46
1 ответ

Директива $IncludeConfig или include() в rsyslog.conf появляется перед большинством стандартных правил, включая тот, который пишет сообщения в /var/log/syslog. Если вы добавите свои правила после других правил в этом файле, то сообщения nut уже будут записаны в syslog до того, как они также будут сопоставлены и записаны в nut.log.

Если вместо этого вы поместите свои правила в отдельный файл, сообщение будет записано в nut.log, тогда стоп пропустит более поздние правила. Ответ — не использовать стоп.

Если проблема в том, что сообщение может содержать как «USB», так и «nut-», и, таким образом, дважды записываться в nut.log, тогда вам нужно использовать более сложный синтаксис.

Устаревший синтаксис был давно заменен на RainerScript. Это означает, что вы можете написать такие фильтры, как:

if ($msg contains "USB" or $msg contains "nut-") then {
   action(type="omfile" file="/var/log/nut.log")
}

Это не должно препятствовать дальнейшей обработке сообщения.

0
ответ дан 12 August 2021 в 17:25

Теги

Похожие вопросы