使用 Tomcat 9.0.31 + Ubuntu 20.04 时未创建/填充文件"catalina.out"(内容改为转到 Ubuntu 系统日志)



我已经使用Tomcat大约18年了。据我所知,我使用 System.out.println(( 留在日志中的所有内容都在文件"catalina.out"中找到,这很好。但是,这种情况似乎已经改变。 我刚刚迁移到 Ubuntu 20.04 + Tomcat 9.0.31,并安装了 Tomcat 做一个"sudo apt install tomcat9"。现在我看到文件"catalina.out"永远不会被创建,并且发送到那里的所有内容现在都被发送到Ubuntu/Linux/Debian日志"syslog"。我不喜欢这样,我想继续为 Tomcat 保留一个单独的/专用日志(这是我经常检查的内容(,而不是在 syslog 中搜索它(这是我很少检查的东西(。

我做了一些研究,这就是我的发现(如果我正确理解了一切(:

  • Tomcat现在作为服务运行在称为"systemsd"的东西中。
  • 出于某种原因,Ubuntu/Debian/Linux 的人决定 Tomcat 的日志应该在 syslog 中找到,而不是在 "catalina.out" 中保持独立。为什么?我不知道,我也不喜欢!
  • 创建/var/log/tomcat 中的其他文件,包括 "catalina.YYYY-MM-DD.log"文件。但我在那里找不到我的"System.out.println(("消息,情况一直如此。
  • 但是,我发现syslog也尝试创建和填充"catalina.out"文件,因为我在syslog中发现了一个错误,上面写着"rsyslogd:file '/var/log/tomcat9/catalina.out':打开错误:权限被拒绝"。
  • 我还找到了一个文件"/etc/rsyslog.d/tomcat9.conf",它确实指示系统日志必须填充文件"/var/log/tomcat9/catalina.out"。这是有道理的,应该可以解决我的需求。
  • 考虑到"权限被拒绝"错误消息,我开始使用权限(我真的没有太多经验(。如果我没记错的话,我手动创建了文件"catalina.out",并修改了其属性,因此所有者是"tomcat/adm",因为"syslog"进程/用户似乎在"adm"组中。重新启动一切...并且创建并填充了"Catalina.out"文件!!因此,这里的主要障碍似乎是缺乏正确的权限,因此系统日志可以执行已告知的操作并填充" catalina.out"文件。我做对了吗?
  • 但是,当我删除所有日志文件(我偶尔删除一次(时,我分配的权限会丢失,并且不再创建该文件。

我们应该怎么做才能解决这个问题?我们可以/应该做点什么,以便 Tomcat 日志不会进入系统日志吗?如果没有,并且考虑到 syslog 似乎正在尝试填充"catalina.out"文件,我们应该怎么做才能纠正权限问题?

提前感谢!

布莱恩

您一直在使用 STDOUT 重定向到 Web 服务器 (catalina( 来调试应用程序。 我不喜欢这种方法,但我用过它。 它很有用。

由于 Tomcat 在此环境中通过 systemd 启动,systemd 会将 STDOUT(在任何预期的配置中(重定向到日志记录例程。 由于我们谈论的是 systemd,因此很有可能可以通过journalctl命令获取日志。

您很有可能可以使用journalctl --unit=tomcat.service获取日志,但这在很大程度上取决于您运行的操作系统,以及配置文件内容(可能位于/usr/share/systemd.d/system/tomcat.service(以及Tomcat的配置的设置方式。

最新更新