我有一个相当普通的 Ubuntu 20.04LTS 盒子,我在其中部署了存储库中的 Tomcat9。开箱即用,这似乎配置为将其日志写入 /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
}
我尝试创建一个 systemd 覆盖文件(并应用了守护程序重新加载)......
[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
}