Se os aplicativos tiverem nomes diferentes, você poderá usar o filtro $ programname.
Se não, você pode usar if $msg contains 'rel: ' then ....
Gostaria de sugerir que você analisasse o link
Eu tenho vários aplicativos django diferentes sob o apache em um servidor Red Hat. Esses aplicativos usam SysLogHandler para enviar mensagens de log ao serviço rsyslog
local. Para canalizar mensagens de log de diferentes aplicativos django para arquivos diferentes, estamos usando rsyslog tagging
(baseado em syslogtag
). Aqui está o que temos em /etc/rsyslog.conf
:
...
$template myFormat,"%msg%\n"
if $syslogfacility-text == 'local2' and $syslogtag == 'dev:' then /var/log/ap/dev/ws.log;myFormat
if $syslogfacility-text == 'local2' and $syslogtag == 'rel:' then /var/log/ap/rel/ws.log;myFormat
...
Funciona assim: se a mensagem de log for dev:Hello World!
, Hello World!
será gravado em /var/log/ap/dev/ws.log
.
Tudo funcionou bem até ontem. Nosso sistema foi atualizado de 6.2 para 6.3. De acordo com yum history
, rsyslog
foi atualizado de 4.6.2-12
para 5.8.10-2
version.
Depois de depurar um pouco, descobri que a condição $syslogtag == 'dev:'
não funciona na nova versão rsyslog
. $syslogtag
agora come parte de uma mensagem até o primeiro espaço e contém dev:Hello
em vez de apenas dev:
.
Você poderia me indicar o que fazer com isso e como fazer o rsyslog analisar a tag corretamente? (Alterar o formato da mensagem de log que vem dos aplicativos django não é uma opção)
Deixe-me saber se você precisar de alguma informação adicional. Obrigado.
Se os aplicativos tiverem nomes diferentes, você poderá usar o filtro $ programname.
Se não, você pode usar if $msg contains 'rel: ' then ....
Gostaria de sugerir que você analisasse o link
Já faz um tempo que eu migrei, mas acredito que você deveria usar
$syslogtag startswith 'rel: '
em vez de ==
Graças a outras respostas para ajudar a fazer a condição if
funcionar, mas o problema é que $msg
não contém a mensagem de log real enviada de um aplicativo, pois $syslogtag
"come" a parte da mensagem até o primeiro espaço nele.
Como solução alternativa, posso alterar o modelo de registro e concatenar a parte da mensagem ausente de %syslogtag%
e %msg%
:
$template myFormat,"%syslogtag:F,58:2%%msg%\n"
Leva a parte de %syslogtag%
após os dois pontos (código 58 ascii) e adiciona o %msg%
depois.
Felizmente, isso funciona para as versões 4.6.2-12
e 5.8.10-2
rsyslog. Mas eu não acho que isso seja uma solução boa e limpa, parece mais um hack. Além disso, não tenho certeza se isso funcionará para futuras versões do rsyslog.
Espero que haja outras respostas ou comentários.