В системном журнале (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
... ?
Есть ли другой способ сделать это?
Спасибо!
Директива $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")
}
Это не должно препятствовать дальнейшей обработке сообщения.