
Die systemd-Unit-Dateien für meine Java-Apps (unter Ubuntu 18.04) scheinen zu funktionieren – ich hatte stdout und stderr so eingestellt, dass sie an syslog gesendet werden, und die Protokolleinträge erschienen in /var/log/syslog.
Ich möchte jedoch dynamische Namen verwenden, daher habe ich /etc/rsyslog.d/10-myapp.conf hinzugefügt, das Folgendes enthält:
$CreateDirs on
:programname, startswith, "myapp-" {
/var/log/apps/$programname.log
stop
}
Dann habe ich rsyslog neu gestartet … und eine Datei mit dem Namen $programname.log im Verzeichnis erhalten.
Ich vermute, dass es ein Problem mit der Art und Weise gibt, wie ich den dynamischen Dateinamen angegeben habe. Ich sehe anderswo Leute, die einenandere Syntax für die Auswahldie Meldung zusammen mit %...% um den Variablennamen. Der Versuch mit dem Folgenden (und der Neustart von rsyslog) hat jedoch nicht geholfen:
:programname, startswith, "myapp-" {
"/var/log/apps/%programname%.log"
stop
}
Das gab mir eine Datei mit dem Namen %programname%.log
Antwort1
Um dynamische Dateinamen zu verwenden, müssen Sie eine Vorlage verwenden. Diese benennt die Zeichenfolge (normalerweise DynFile
in Beispielen) und interpoliert %property%
bei Verwendung die Werte in der Zeichenfolge. Um die Vorlage in der Legacy-Syntax zu verwenden, müssen Sie ihr das Präfix ?
.Try voranstellen.
$template DynFile,"/var/log/apps/%programname%.log"
:programname, startswith, "myapp-" {
?DynFile
stop
}
Die nicht-veraltete Syntax ist etwas expliziter und kann manchmal besser lesbar sein. Sie verwenden tatsächlich die eingebauteomfileModul. Vorsicht,Vorlagenhaben zwei verschiedene Verwendungszwecke: als dynamische Dateinamen und als Format für die zu schreibenden Daten. Für einfache Zeichenfolgen werden sie jedoch auf die gleiche Weise definiert, z. B.:
template(name="myfile" type="string"
string="/var/log/apps/%programname%.log")
if ($programname startswith "myapp-") then {
action(type="omfile" dynaFile="myfile")
stop
}
Schlüsselwörter wie dynaFile
müssen genau geschrieben werden. Beachten Sie, dass action()
es eine template=...
Schlüsselwortoption gibt. Diese dient als Vorlage für die in die Datei geschriebenen Daten.