Goバイナリをサービスとして実行し、すべてのログを維持するためにsyslog所有のログファイルを作成しました。
これは私のサービスファイルです::
[Unit]
Description=myapp
[Service]
Type=simple
Restart=always
RestartSec=30
WorkingDirectory= /home/go/src/myapp
ExecStart=/home/go/src/myapp/myapp
# myapp.log owned by syslog
PermissionsStartOnly=true
ExecStartPre=/bin/mkdir -p /var/log/myapp
ExecStartPre=/bin/chown syslog:adm /var/log/myapp
ExecStartPre=/bin/chmod 755 /var/log/myapp
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=myapp
[Install]
WantedBy=multi-user.target
次に、rsyslogを使用してシステムログを管理し、/etc/rsyslog.d/myapp.confに次の内容を含むファイルを作成します。
if $programname == 'myapp' then /var/log/myapp/myapp.log
& stop
その後、サービスを再起動しました。私のためのログファイルが生成されます。ログファイルには2つの質問があります。
- 15日ごとにすべてのログファイルデータを更新する必要があります。これを行う方法はありますか?
- 一部のAPIは3分ごとに応答しますが、特定のAPIのログ生成を制限する方法はありますか?
私はこれをすべて行うためにsystemdを使用しています。 systemdサービスに添付されたログファイルを生成する方法がある場合は、ご提案ください。
答え1
- ログをフラッシュするには、標準のlogrotateを使用してpostrotateスクリプトからrsyslogを再ロードできます。マニュアルページ
- ご覧のとおり。 Systemdはすべての標準出力をsyslogに書き込むため、stdoutに移動する必要があるAPIと移動しないでくださいAPIをフィルタリングする作業はアプリケーション内で実行する必要があります。