You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 9运行Java Servlet时Log4j2无法生成日志文件求助

问题根因&修复步骤

1. 最常见原因:目录权限不足

Ubuntu 20.04 官方源安装的 Tomcat 9 默认以 tomcat 系统用户身份运行,你配置的日志输出目录 /home/myuser/myfolder/ 属于普通用户个人目录,tomcat 用户默认没有该目录的读写权限,因此无法生成日志文件。
两种修复方案选其一即可:

  • 方案一:修改日志输出路径到Tomcat有权限的目录,把log4j2.xml中的logdir属性值改为/var/log/tomcat9,该目录是Tomcat默认的日志目录,tomcat用户天然有读写权限。
  • 方案二:给目标目录开放权限,执行以下命令:
# 给日志目录赋予tomcat用户所有权
sudo chown tomcat:tomcat /home/myuser/myfolder/
# 给上层用户目录开放执行权限,确保tomcat用户可以进入路径
sudo chmod o+x /home/myuser/

2. 优化配置加载逻辑

你当前把log4j2.xml放在src/main/webapp/WEB-INF/classes下不符合Maven项目规范,建议将配置文件挪到src/main/resources目录下,Maven执行打包时会自动将该目录下的所有文件输出到WEB-INF/classes中,避免手动放置的路径问题。
同时可以把log4j2.xml中<Configuration status="info">的status属性改为debug,Log4j2初始化阶段的调试日志会输出到Catalina日志中,方便你排查配置加载异常。

3. 显式配置Log4j2初始化监听器

虽然Servlet 3.0+理论上支持自动扫描加载Log4j2,但部分Tomcat版本存在自动扫描失效的问题,可以在web.xml中显式添加初始化配置:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

  <display-name>My App</display-name>
  <!-- 新增Log4j2配置开始 -->
  <context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>classpath:log4j2.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
  </listener>
  <!-- 新增Log4j2配置结束 -->
</web-app>

4. 验证部署

修改完成后执行以下步骤重新部署,避免Tomcat缓存旧代码:

  1. 执行mvn clean package重新生成war包
  2. 停止Tomcat服务:sudo service tomcat9 stop
  3. 删除webapps下旧的servlet-tutorial目录和servlet-tutorial.war包
  4. 将新生成的war包拷贝到/var/lib/tomcat9/webapps/目录
  5. 启动Tomcat服务:sudo service tomcat9 start

内容的提问来源于stack exchange,提问作者Sanlok Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:15:04