Eu criei uma regra para redirecionar mensagens contendo {FILTER} no arquivo /etc/rsyslog.d/40-filter.conf
:msg,contains,"{FILTER}" /var/log/filter.log
& ~
Eu editei o arquivo /etc/rsyslog.conf para que ele aceite mensagens UDP remotas removendo o comentário de linhas
$ModLoad imudp
$UDPServerRun 514
A origem das minhas mensagens do syslog é o seguinte script python simples
#! /usr/bin/python
import logging
import logging.handlers
logger = logging.getLogger('LoggingTest')
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('{FILTER} %(message)s')
handler = logging.handlers.SysLogHandler()
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info("Test Message")
Eu reiniciei o rsyslog usando
sudo service rsyslog restart
Quando executo meu script, a seguinte linha aparece em / var / log / messages, / var / log / syslog e /var/log/user.log, mas ele não aparece em /var/log/filter.log, que existe, mas permanece vazio.
Jun 23 17:18:29 {FILTER} Test Message
Se eu usar a ferramenta de linha de comando 'logger' (exemplo de linha de comando abaixo), a regra será aplicada corretamente
$ logger "{FILTER} Test Message 2"
$ cat /var/log/filter.log
Jun 23 17:21:28 NDU1010 nick: {FILTER} Test Message 2
Por que a regra não é aplicada a mensagens do meu script python? Eu estou em uma perda para explicar isso.