
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 DynFile
em 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 dynaFile
precisam 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.