Eu preciso tomar várias ações para algumas mensagens de log. Por exemplo, quero registrá-los em arquivos diferentes de acordo com a gravidade.
Tudo está ok se eu usar isso:
if $programname == 'myprog' then -/var/log/myprog.log
if $programname == 'myprog' and $syslogseverity-text >= 'warning' then -/var/log/myprog-alert.log
if $programname == 'myprog' ~
Isto registra todas as mensagens emitidas por 'myprog' para /var/log/myprog.log
Este aviso somente de log e mensagem de erro emitido por 'myprog' para - / var / log / myprog-alert.log
E o processamento é interrompido (graças a '~')
Eu gosto de ter algo mais sexy:
if $programname == 'myprog' then {
*.* -/var/log/myprog.log
*.warning -/var/log/myprog-alert.log
~
}
Mas esta construção posterior, embora aceita pelo rsyslog, não filtra contra o programname.
Por exemplo, todas as mensagens são gravadas em /var/log/myprog.log, mesmo quando originadas de qualquer processo.
Alguém pode explicar onde está o meu erro ou mal-entendido?
Método final, a partir das respostas abaixo:
use um rsyslogd "moderno". Versão > 7.x.y
use esta sintaxe:
if $programname == 'myprog' then {
*.warning -/var/log/myprog-alert.log
*.* -/var/log/myprog.log
*.* stop
}
ou este aqui:
if $programname == 'myprog' then {
*.warning -/var/log/myprog-alert.log
-/var/log/myprog.log
stop
}