systemd StandardOutputをファイルに送信するときに日付と時刻を含める方法

systemd StandardOutputをファイルに送信するときに日付と時刻を含める方法

ログファイルに出力するシステムサービスがあります

StandardOutput=file:/path/to/log/file
StandardError=file:/path/to/error/file

これらの出力とエラーの前にデータ+時間を追加して読み取ることができる方法は何ですか?

10-09-2019 12:43:23 The output here.

ベストアンサー1

StandartOutput私はsystemdを使ってこれを行う方法が見つかりませんでしたが、StandardErrorsystemdで実行されているpython3スクリプトの解決策を見つけました。 Journaldはデフォルトで出力をsyslogに送信するため、rsyslog(またはシステム上のすべてのsyslogユーティリティ)を使用して必要なものを取得できます(出力はJournaldに送信されるかのようにジャーナルでも複製されますが、関連するものと同じように)syslogは次のようになります。 。有効になります(ほとんどの最新ディストリビューションのデフォルト設定)。

これは私の/etc/rsyslog.d/python3_custom.conf設定ファイルです。

template(name="python3_custom_file" type="string" string="/var/log/python3/%programname:16:$%/out.log")
template(name="python3_custom_output" type="list") {
     property(name="timereported" dateFormat="rfc3339")
     constant(value=" ")
     property(name="syslogseverity-text" caseConversion="upper")
     property(name="msg" spifno1stsp="on")
     property(name="msg" droplastlf="on")
     constant(value="\n")
}

if($programname startswith 'python3_custom_') then {
        action(type="omfile" dynaFile="python3_custom_file" template="python3_custom_output")
        stop
}

それからあなたはsystemctl restart rsyslog。最後に、どのsyslogを使用するかをsystemdサービスに通知する必要があります。programnameファイルにこのディレクティブを追加するだけです。これにより、ディレクティブの最後に出力するために変更する必要がある複数のサービスを持つことができます(必要に応じて簡単に変更できます)。SyslogIdentifier=python3_custom_programname.serviceprogramname/var/log/python3/programname/out.log

おすすめ記事