
私の Java アプリ (Ubuntu 18.04 上) の systemd ユニット ファイルは動作しているようです。stdout と stderr を syslog に送信するように設定し、ログ エントリは /var/log/syslog に表示されていました。
ただし、動的な名前を使用したいので、次の内容を含む /etc/rsyslog.d/10-myapp.conf を追加しました。
$CreateDirs on
:programname, startswith, "myapp-" {
/var/log/apps/$programname.log
stop
}
その後、rsyslog を再起動すると、ディレクトリに $programname.log という名前のファイルが作成されました。
動的ファイル名の指定方法に問題があるのではないかと思います。他の場所では、選択するための異なる構文変数名の前後に %...% が付いたメッセージ。ただし、以下を試しても (rsyslog を再起動しても) 効果はありませんでした。
:programname, startswith, "myapp-" {
"/var/log/apps/%programname%.log"
stop
}
%programname%.logという名前のファイルが作成されました
答え1
動的なファイル名を使用するには、テンプレートを使用する必要があります。これは文字列に名前を付け(通常DynFile
は例)、使用時に文字列内の値を挿入します%property%
。従来の構文でテンプレートを使用するには、?
.Tryをプレフィックスとして付ける必要があります。
$template DynFile,"/var/log/apps/%programname%.log"
:programname, startswith, "myapp-" {
?DynFile
stop
}
非レガシー構文はより明確で、時にはより読みやすくなることがあります。実際には組み込みのオムファイルモジュール。注意してください、テンプレート2 つの異なる用途があります: 動的なファイル名として、および書き込むデータの形式として。ただし、単純な文字列の場合は、同じ方法で定義されます。例:
template(name="myfile" type="string"
string="/var/log/apps/%programname%.log")
if ($programname startswith "myapp-") then {
action(type="omfile" dynaFile="myfile")
stop
}
のようなキーワードはdynaFile
正確に入力する必要があります。 にはキーワード オプションaction()
があることに注意してくださいtemplate=...
。これは、ファイルに書き込まれるデータのテンプレートを提供するためのものです。