rsyslog não grava arquivo de log dinâmico

rsyslog não grava arquivo de log dinâmico

Os arquivos da unidade systemd para meus aplicativos Java (no Ubuntu 18.04) parecem estar funcionando - eu configurei stdout e stderr para serem enviados para o syslog e as entradas de log estavam aparecendo em/var/log/syslog.

No entanto, quero usar nomes dinâmicos, por isso adicionei /etc/rsyslog.d/10-myapp.conf contendo:

$CreateDirs on

:programname, startswith, "myapp-" {
  /var/log/apps/$programname.log
  stop
}

Em seguida, reiniciei o rsyslog... e obtive um arquivo chamado $programname.log no diretório.

Suspeito que possa haver um problema na forma como especifiquei o nome do arquivo dinâmico - vejo em outro lugar pessoas usando umsintaxe diferente para selecionara mensagem junto com %...% ao redor do nome da variável. No entanto, tentar o seguinte (e reiniciar o rsyslog) não ajudou:

:programname, startswith, "myapp-" {
  "/var/log/apps/%programname%.log"
  stop
}

Isso me deu um arquivo chamado% programname%.log

Responder1

Para usar nomes de arquivos dinâmicos, você precisa usar um modelo. Isso nomeia a string (geralmente DynFileem exemplos) e interpola os %property%valores na string quando usado. Para usar o modelo na sintaxe legada, você precisa prefixá-lo com ?.Try

$template DynFile,"/var/log/apps/%programname%.log"
:programname, startswith, "myapp-" {
  ?DynFile
  stop
}

A sintaxe não herdada é um pouco mais explícita e às vezes pode ser mais legível. Você está realmente usando o builtinarquivoommódulo. Cuidado,modelostêm 2 usos diferentes: como nomes de arquivos dinâmicos e como formato para gravação de dados. Para strings simples, porém, elas são definidas da mesma maneira, por exemplo:

template(name="myfile" type="string"
     string="/var/log/apps/%programname%.log")

if ($programname startswith "myapp-") then {
     action(type="omfile" dynaFile="myfile")
     stop
}

Palavras-chave como dynaFileprecisam ser escritas com exatidão. Observe que action()tem uma template=...opção de palavra-chave. Isso fornece um modelo para os dados escritos no arquivo.

informação relacionada