
No syslog (Raspbian rsyslog swVersion = "8.1901.0"),
Estou tentando combinar/filtrar uma mensagem do sistema contendo uma string específica AMBOS para /var/log/syslog
(padrão) E para um arquivo de log separado personalizado, ou seja /var/log/nut.log
:.
Consegui alcançar isso colocando as seguintes linhas de filtro em /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
O & stop
é necessário para interromper os filtros assim que uma correspondência for feita. Acredito que o método preferido é colocar isso em um arquivo dedicado, ou seja:/etc/rsyslog.d/0-nut.conf
Mas, quando faço isso, os filtros param de registrar em /var/log/syslog
e registram exclusivamente em /var/log/nut.log
... ?
Existe uma maneira diferente de fazer isso?
THX!
Responder1
A diretiva $IncludeConfig
or in aparece antes da maioria das regras padrão, incluindo aquela que grava mensagens em . Se você adicionar suas regras após as outras regras neste arquivo, as mensagens nut já terão sido gravadas antes de também serem correspondidas e gravadas em .include()
rsyslog.conf
/var/log/syslog
syslog
nut.log
Se, em vez disso, você colocar suas regras em um arquivo separado, a mensagem será gravada nut.log
e stop
as regras posteriores serão ignoradas. A resposta é não usar stop
.
Se o problema é que uma mensagem pode conter "USB" e "nut-" e, portanto, ser escrita duas vezes em nut.log
, então você precisa usar uma sintaxe mais sofisticada.
A sintaxe herdada foi substituída porRainerScripta muito tempo atrás. Isso significa que você pode escrever filtros como:
if ($msg contains "USB" or $msg contains "nut-") then {
action(type="omfile" file="/var/log/nut.log")
}
Isto não precisa impedir o processamento adicional da mensagem.