Ermitteln, ob das Programm in das Systemd-Journal oder in die Standardausgabe protokollieren soll

Ermitteln, ob das Programm in das Systemd-Journal oder in die Standardausgabe protokollieren soll

Ich aktualisiere eine Reihe von Programmen für RHEL7, einige, manche. Wenn sie als systemd-Dienste gestartet werden, möchte ich, dass sie in das systemd-Journal schreiben. Wenn sie direkt auf dem Terminal ausgeführt werden, beispielsweise zu Testzwecken, möchte ich, dass sie stattdessen in stdout schreiben. Wie kann ich das am elegantesten machen?

Ich möchte die erweiterten Funktionen des Journals nutzen (Protokollierung von Schweregrad, Dateiname, Zeilennummer, Threadname usw.), daher reicht das einfache Schreiben in die Standardausgabe nicht aus.

Meine Suche ergab den Rat, die übergeordnete PID des Prozesses oder dessen Kontrollgruppe zu überprüfen. Gibt es einen besseren Weg? Das scheinen ungeschickte Lösungen zu sein. Im Idealfall gäbe es eine Funktion, die ich aufrufen könnte, oder eine Umgebungsvariable, die ich überprüfen könnte.

Zusätzliche Information:

(Mein Fallback-Plan besteht darin, einen Befehlszeilenschalter zu verwenden, aber es wäre sicher schön, wenn es eine automatische Erkennung gäbe.)

Antwort1

In systemd Version 231 JOURNAL_STREAMwurde die Umgebungsvariable genau zu diesem Zweck eingeführt. Ihr Programm überprüft ihren Wert, vergleicht ihn mit dem Gerät und der I-Node-Nummer seines Standardfehlers und ändert sein Verhalten entsprechend.

WannnichtWenn Sie mit dem Journal verbunden sind, können Sie (natürlich) immer etwas wie JSON verwenden, das (als einzelne Zeile pro Objekt) in die Standardfehlerdatei geschrieben wird, um auch dort strukturierte Protokolldatensätze zu haben. RFC 5424 bietet auch (eingeschränktere) Optionen für strukturierte Daten.

Antwort2

systemdbehandelt diesen Fall bereits elegant für Sie, wie dokumentiert insystemd.exec.

Protokollieren Sie bei STDOUT. Bei Ausführung über systemd leitet systemd STDOUT standardmäßig zum Journal um.

Eine weitere Option ist, journal+consoledass Sie sich immer bei beiden anmelden möchten.

Die Protokollierung auf STDOUT ist auch eine bewährte Methode in der12 Faktor App-Design.

verwandte Informationen