
私はリポジトリからTomcat9を展開した非常に普通のUbuntu 20.04LTSボックスを持っています。デフォルトでは、これは/var/log/tomcat9/にログを書き込むように設定されているように見え、実際にはログファイルがあります。しかし、これには私が期待する情報のほんの一部しか含まれていません。残りはsystemctl status tomcat9
/var/log/syslogの出力で見ることができ、/var/log/syslogに書き込まれます。
提供されたユニットファイルの唯一の関連コンテンツは次のとおりです。
SyslogIdentifier=tomcat9
Tomcatをインストールすると、....を含む/etc/rsyslog.d/tomcat9.confも作成されます。
# Send Tomcat messages to catalina.out when using systemd
$template TomcatFormat,"[%timegenerated:::date-year%-%timegenerated:::date-month%-%timegenerated:::date-day% %timegenerated:::date-hour%:%timegenerated:::date-minute%:%timegenerated:::date-second%] [%syslogseverity-text%]%msg%\n"
:programname, startswith, "tomcat9" {
/var/log/tomcat9/catalina.out;TomcatFormat
stop
}
出力例systemctl status tomcat9
● tomcat9.service - Apache Tomcat 9 Web Application Server
Loaded: loaded (/lib/systemd/system/tomcat9.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/tomcat9.service.d
└─override.conf
Active: active (running) since Fri 2022-04-08 13:07:39 UTC; 17min ago
Docs: https://tomcat.apache.org/tomcat-9.0-doc/index.html
Process: 1006 ExecStartPre=/usr/libexec/tomcat9/tomcat-update-policy.sh (code=exited, status=0/SUCCESS)
Main PID: 1026 (java)
Tasks: 53 (limit: 2274)
Memory: 332.9M
CGroup: /system.slice/tomcat9.service
└─1026 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Djava.util.logging.config.file=/var/lib/tomcat9/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.C>
Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 ConnectionManager.openConnection(444) | opening JDBC connection
Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 JDBCTransaction.begin(87) | current autocommit status: true
Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 JDBCTransaction.begin(90) | disabling autocommit
Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 JDBCTransaction.commit(134) | commit
Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 JDBCTransaction.toggleAutoCommit(227) | re-enabling autocommit
上記の「cfPullService」は、デプロイされたJavaコード(実際にはブラックボックス)に由来し、時には他の値を含めることができます。
そして/var/log/syslogのサンプルエントリ...
Apr 8 13:20:12 myhost tomcat9[1026]: [cfPullService] INFO 13:20:12 RunSearchManagerImpl.runEarlyEngagementSearch(165) | Finished saving early engagement notices.
Apr 8 13:20:12 myhost tomcat9[1026]: [cfPullService] INFO 13:20:12 RunSearchManagerImpl.runPipelineSearch(176) | Running pipeline search
提供された/etc/rsyslog.d/tomcat9.confは次のとおりです。
# Send Tomcat messages to catalina.out when using systemd
$template TomcatFormat,"[%timegenerated:::date-year%-%timegenerated:::date-month%-%timegenerated:::date-day% %timegenerated:::date-hour%:%timegenerated:::date-minute%:%timegenerated:::date-second%] [%syslogseverity-text%]%msg%\n"
:programname, startswith, "tomcat9" {
/var/log/tomcat9/catalina.out;TomcatFormat
stop
}
システムオーバーレイファイルを作成し、デーモンのリロードを適用してみました...
[Service]
StandardOutput=syslog
StandardError=syslog
しかし、これは行動には影響しません。
私がどうする
- Tomcatの出力を/var/log/tomcat9のファイルにインポートします。
- Tomcat出力を/var/log/syslogに送信するのを停止します。
答え1
問題の一部が説明されているようです。バグ #1861881。
これにより、システムログからエントリを除外してジョブログファイルを取得できました。
- /etc/rsyslog.d/tomcat.confから内容を削除します(自動パッチによる回復を防ぐためにファイルを空白にしてください)。
- 内容を /etc/rsyslog.d/12-tomcat9.conf に入れて (50-default.conf 以前にロードされたことを確認するために) "action 'action-11-builtin:omfile' が中断されるのを防ぎます (モジュール ' builtin: omfile' ), 再試行 0. この前に「理由」を知らせるメッセージが必要です。
- 権限の問題を回避するには、/var/log/tomcat9/catalina.outから/var/log/tomcat.logにパスを変更します(syslogユーザーは/var/log/tomcat9に書き込めません)。
- 次の内容で新しい/etc/logrotate.dファイルを追加します。
/var/log/tomcat.log
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}