나는 저장소에서 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
}