使 Tomcat 登录 /var/log

使 Tomcat 登录 /var/log

我正在尝试让我们的 Tomcat 9 服务器记录其内部登录/var/log而不是${catalina.base}/logs

我尝试更改logging.properties中的目标,但中的日志目录${catalina.base}实际上是一个符号链接,因此将目标更改为/var/log应该可以解决问题。 这两个想法都没有奏效。

另外,我想知道这是否是由 引起的catalina.policy,但这意味着 Tomcat 使用该-secure选项启动。我的 Tomcat 使用 systemd 作为服务启动。我不知道如何检查是否使用了 -secure。

Tomcatlogging.properties实际上是在用。当我使用 检查进程时ps,我得到了-Djava.util.logging.config.file=/opt/rh/jws5/root/usr/share/tomcat/conf/logging.properties,这是正确的文件,也就是我试图修改的文件。

我在 RHEL 8 上使用带有 Java 8 的 Tomcat 9。

编辑:我也尝试在服务文件中添加ReadWritePaths=/var/log/tomcat或。仍然没有变化。ReadWritePaths=/var/log

編輯2:当前配置的一些详细信息。我的 CATALINA_BASE 是 /opt/rh/jws5/root/usr/share/tomcat。它包含以下内容:

drwxr-xr-x 2 root root 134 Dec  7 16:18 bin
lrwxrwxrwx 1 root root  28 Nov 15 17:45 conf -> /etc/opt/rh/scls/jws5/tomcat
lrwxrwxrwx 1 root root  39 Nov 15 17:45 lib -> /opt/rh/jws5/root/usr/share/java/tomcat
lrwxrwxrwx 1 root root  15 Jan 31 17:42 logs -> /var/log/tomcat
lrwxrwxrwx 1 root root  39 Nov 15 17:45 temp -> /var/opt/rh/scls/jws5/cache/tomcat/temp
lrwxrwxrwx 1 root root  40 Nov 15 17:45 webapps -> /var/opt/rh/scls/jws5/lib/tomcat/webapps
lrwxrwxrwx 1 root root  39 Nov 15 17:45 work -> /var/opt/rh/scls/jws5/cache/tomcat/work

日志以前指向 /var/opt/rh/scls/jws5/log/tomcat。在当前配置下,Tomcat 不再登录 /var/opt/rh/scls/jws5/log/tomcat。但它也不会登录 /var/log。

下面是我的logging.properties文件的片段,其中包含各种路径:

1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8

2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.maxDays = 90
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8

3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
3manager.org.apache.juli.AsyncFileHandler.maxDays = 90
3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 90
4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

编辑3:我尝试用 替换${catalina.base}/logs其中的logging.properties内容/var/log/tomcat,但仍然无济于事。

答案1

最终解决问题的办法有两点:

  • 我的 Tomcat 进程不属于 root,因此 /var/log/tomcat 目录需要每个人都具有读/写权限。

  • grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {需要在该文件的部分添加以下几行catalina.policy

     permission java.io.FilePermission
      "/var/log/tomcat", "read, write";
     permission java.io.FilePermission
      "/var/log/tomcat/*", "read, write, delete";
    

相关内容