私の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=...
。これは、ファイルに書き込まれたデータのテンプレートを提供することです。