
En syslog (Raspbian rsyslog swVersion="8.1901.0"),
Estoy intentando hacer coincidir/filtrar un mensaje del sistema que contiene una cadena específica AMBOS /var/log/syslog
(predeterminado) Y a un archivo de registro separado personalizado, es decir: /var/log/nut.log
.
He podido lograrlo colocando las siguientes líneas de filtro en /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
Es & stop
necesario para detener los filtros una vez que se realiza una coincidencia. Creo que el método preferido es colocar esto en un archivo dedicado, es decir:/etc/rsyslog.d/0-nut.conf
Pero, cuando hago eso, ¿los filtros dejan de iniciar sesión /var/log/syslog
y lo hacen exclusivamente en /var/log/nut.log
...?
¿Existe una forma diferente de hacer esto?
¡Gracias!
Respuesta1
La directiva $IncludeConfig
o aparece antes de la mayoría de las reglas estándar, incluida la que escribe mensajes en . Si agrega sus reglas después de las otras reglas en este archivo, los mensajes nut ya se habrán escrito antes de que también coincidan y se escriban en .include()
rsyslog.conf
/var/log/syslog
syslog
nut.log
Si, en cambio, coloca sus reglas en un archivo separado, el mensaje se escribirá en nut.log
y luego stop
se omitirán las reglas posteriores. La respuesta es no consumir stop
.
Si el problema es que un mensaje puede contener "USB" y "nut-" y, por lo tanto, escribirse dos veces en nut.log
, entonces necesita utilizar una sintaxis más sofisticada.
La sintaxis heredada fue reemplazada porRainerGuiónhace mucho tiempo. Significa que puedes escribir filtros como:
if ($msg contains "USB" or $msg contains "nut-") then {
action(type="omfile" file="/var/log/nut.log")
}
Esto no tiene por qué impedir el procesamiento posterior del mensaje.