Tomcat 7이 RHEL7에서 catalina.out에 대한 로그 출력을 생성하지 않습니다.

Tomcat 7이 RHEL7에서 catalina.out에 대한 로그 출력을 생성하지 않습니다.

Apache Tomcat 7.0이 설치된 RHEL7 서버가 있습니다. 최근 RHEL7.1로 업데이트한 후 ${catalina.base}/logs/catalina.out에 대한 모든 로깅이 중지되었습니다. 하지만 Journalctl 내부에서 로그를 받습니다.

Journalctl -u tomcat을 입력하면 로깅이 발생합니다. catalina.out에도 로그인할 수 있는 방법이 있나요?

cat /usr/share/tomcat/logs/catalina.out
no output

journalctl -u tomcat

Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
Aug 20 10:07:14 server.example.com server[26435]: at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
...

답변1

Jamie의 대답은 정확합니다. rsyslog가 tomcat에 일어나는 일을 기록하도록 강제할 수 있습니다. 그러나 이것은 대답하지 않습니다rhel 7의 tomcat 7은 catalina.out에 로그인하지 않습니다. 또는 그렇다면 왜 catalina.out과 catalina 모두에 날짜와 함께 기록합니까(RPM을 사용하여 설치하지 않은 경우).

첫째, 지난 7.0.42 정도부터 Red Hat의 스크립트는 RHEL 6의 동작을 모방했기 때문에 catalina.out을 사용했습니다. 내가 아는 한 그들은 "포크"를 사용하여 이를 제공합니다 systemd. 7.0.56이 출시되었을 때 그들은 이를 완전히 변경하여 /usr/libexec/tomcat에 Tomcat이 simpleRun 대신 모드 에서 실행되도록 하는 새로운 스크립트와 래퍼를 만들었습니다 forked. systemd가 PID를 제어하고 로그에 stdout액세스할 수 있도록 허용합니다. 여전히 파일이 stderr있지만 정보가 평소보다 더 제한되어 있습니다 .catalina.$DATE.log/var/log/tomcatcatalina.out

둘째, /etc/tomcat/logging.properties를 살펴보겠습니다. catalina, localhost, 관리자, 호스트 관리자 간에 특정 방식으로 로그를 대조하는 것을 볼 수 있습니다. 또한 rsyslog 기능 지원과 기본적으로 이를 "처리"하는 방법도 있음을 알 수 있습니다. ConsoleHandler파일에 있는 내용 으로 요약됩니다 . 이를 변경하면 로그의 동작이 변경됩니다 /var/log/tomcat.

journalctl -u tomcatcatalina.out이 가져야 할 모든 것을 보여줄 것입니다. 내가 아는 한, /usr/libexec/tomcat에 있는 Red Hat 래퍼를 수정하지 않고 모든 것을 catalina.out으로 이동시키는 신뢰할 수 있는 방법은 없습니다. 이러한 스크립트를 수정하고 업데이트가 발생하면 변경 사항을 덮어쓰게 됩니다.

catalina.out을 정말로 원한다면 Jamie의 rsyslog 예제 구성을 사용하십시오. 해당 정보가 채워질 뿐만 아니라 systemd 로그에도 동일한 정보가 있다는 점만 알아두세요.

답변2

다음 두 줄을 포함하는 새 파일을 만드는 것이 /etc/rsyslog.d/tomcat.conf나에게 적합합니다.

programname,contains,"server" /var/log/tomcat/catalina.out
programname,contains,"server" ~

그런 다음 rsyslog 데몬을 다시 시작합니다.

service rsyslog restart

답변3

새 버전에서는 rsyslog 구문이 변경되는 것 같습니다. RHEL 7.4에서 8.24.0을 실행하면 다음 구문이 /etc/rsyslog.d/tomcat.conf작동합니다.

if ($programname contains "server") then {
    action(type="omfile" file="/var/log/tomcat/catalina.out" flushOnTXEnd="off")
    stop
}

그런 다음 Jaimie가 지적했듯이 rsyslog를 다시 시작해야 합니다.

service rsyslog restart

관련 정보