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


9

我有一台安装了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)
...

您是否已验证变量“ catalina.base”的设置正确?
VGe0rge

是的,catalina.base设置正确。 jinfo -sysprops 26435 | grep catalina.base catalina.base = /usr/share/tomcat
xterrez

您可以尝试通过tomcat进程完全打开该文件。尝试stat /usr/share/tomcat/logs/catalina.out
VGe0rge

不,该tomcat进程未使用catalina.out文件。 stat /usr/share/tomcat/logs/catalina.out File: ‘/usr/share/tomcat/logs/catalina.out’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd01h/64769d Inode: 1013845 Links: 1 Access: (0660/-rw-rw----) Uid: ( 91/ tomcat) Gid: ( 91/ tomcat) Access: 2015-08-19 11:21:32.835211998 +0000 Modify: 2015-08-17 03:40:02.785809293 +0000 Change: 2015-08-17 03:40:02.785809293 +0000 Birth: -
xterrez

好的,尝试在tomcat conf文件中添加绝对路径,然后重新启动服务。然后重试stat命令以查看结果。
VGe0rge

Answers:


10

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

首先,在过去的7.0.42左右,Red Hat的脚本使用catalina.out,因为它们的脚本模仿了RHEL 6的行为。据我所知,他们使用的服务是“ forking” 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示例配置。只是知道它不仅可以填充内容,而且系统日记也将具有相同的信息。


好答案!我正在考虑在Tomcat版本之间进行不兼容的更改...:|
Rade_303 '17

6

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

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

然后重新启动您的rsyslog守护程序:

service rsyslog restart

0

似乎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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.