Tomcat 7 不会在 RHEL7 上向 catalina.out 生成日志输出

xte*_*rez 10 rhel rsyslog tomcat systemd-journald

我有一个安装了 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)
...
Run Code Online (Sandbox Code Playgroud)

Sok*_*kel 10

Jamie 的回答是正确的,您可以强制 rsyslog 记录 tomcat 的情况。但是,这并不能解释为什么rhel 7 上的 tomcat 7 没有登录到 catalina.out。或者如果是,为什么它同时登录到 catalina.out 和带有日期的 catalina(如果您没有使用 RPM 安装)。

首先,在过去的 7.0.42 左右,Red Hat 的脚本使用 catalina.out,因为他们的脚本模仿 RHEL 6 的行为。据我所知,他们使用“分叉”服务systemd. 当7.0.56发布后,他们改变了这一切完全由在/ usr / libexec目录/ tomcat的武力使tomcat的新脚本和包装在运行simple模式,而不是forked,允许systemd有PID控制,并stdoutstderr去杂志。中仍然有一个catalina.$DATE.log文件/var/log/tomcat,但信息比普通catalina.out.

其次,让我们看看/etc/tomcat/logging.properties。您会看到它以特定方式在 catalina、localhost、manager、host-manager 之间整理日志。您还会注意到它也有 rsyslog 工具支持,以及它基本上是如何“处理”它的。它归结为ConsoleHandler那个文件中的。更改这些将更改/var/log/tomcat.

journalctl -u tomcat将向您展示 catalina.out 应该拥有的一切。据我所知,如果不修改 /usr/libexec/tomcat 中 Red Hat 的包装器,没有一种可靠的方法可以让所有内容都转到 catalina.out。如果您确实修改了这些脚本并且出现了更新,您的更改将被覆盖。

如果您确实需要 catalina.out,请使用 Jamie 的 rsyslog 示例配置。只要知道它不仅会填满那个,而且 systemd 日志也会有相同的信息。


Jam*_*aer 6

创建一个/etc/rsyslog.d/tomcat.conf包含接下来两行的新文件对我有用:

programname,contains,"server" /var/log/tomcat/catalina.out
programname,contains,"server" ~
Run Code Online (Sandbox Code Playgroud)

然后重启你的 rsyslog 守护进程:

service rsyslog restart
Run Code Online (Sandbox Code Playgroud)