Você pode fazer isso usando substitutos de propriedade trabalhando na propriedade msg , supondo que é onde a string localhost é encontrada.
Coloque no seu rsyslog.conf ou similar uma linha definindo um modelo chamado, digamos, newmsg :
$template newmsg,"%timestamp% %programname% %msg:R,ERE,1:(.*) localhost --end% HOST01 %msg:R,ERE,1: localhost (.*)--end%\n"
Para tornar isso mais legível aqui, ele é dividido em várias linhas, mas você deve usar a versão acima:
$template newmsg,
"%timestamp% %programname%
%msg:R,ERE,1:(.*) localhost --end%
HOST01
%msg:R,ERE,1: localhost (.*)--end%
\n"
Contém 2 usos de um substituto assim: %msg:R,ERE,1: ...(...)... --end% onde %msg% é a propriedade usada como entrada para um regexp R , estendida regexp ERE , mantém apenas o grupo de captura 1, seguido pelo padrão regexp que tem um grupo de captura () , com o substituto finalizado por --end .
Como esse modelo sempre adiciona a palavra HOST01 à mensagem, você só deve usá-la se a mensagem realmente contiver localhost , então
edite a ação em que você registra a mensagem para testar isso, por exemplo:
:msg, contains, " localhost " -/var/log/test.log; newmsg
Observe o uso do modelo no final: ; newmsg .
Você também pode usar modelos ao enviar para um controle remoto, por exemplo:
action(type="omfwd"
Target="server.example.net"
Port="10514"
Protocol="tcp"
Template="newmsg"
)