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

答え2

これを試してください(警告:テストされていません)

  1. EnableそしてStart「logging.service」systemctl

  2. [Service]定義では、logging.service次を使用します。

[Unit]
Description=Start logging server   # or whatever you choose to call it

[Service]
...
Type=forking
ExecStart=/bin/bash myLogger.sh start
...

  1. スクリプトbashmyLogger.shまたは希望の名前で呼び出す)。スクリプト内のログの各行を次から始めます。
printf '%(%Y-%m-%d %H:%M:%S)T' -1

printf改行は導入されていないため、すぐ後ろにログデータを追加できます。

関連情報