java - 使用 Tomcat 9 时无法让 log4j 写入日志文件
问题描述
我正在设置一个在 Tomcat 9 上运行的 Web 应用程序。
为了匹配其他地方编写的代码,我们希望继续使用 log4j 作为 Web 应用程序中的代码。
我在 build.gradle 中定义了以下内容
implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.3'
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.3'
runtimeOnly group: 'org.apache.logging.log4j', name: 'log4j-web', version: '2.13.3'
和两者log4j-api-2.13.3.jar
都存在于我的 webapp 文件夹下的 WEB-INF/libs 中。log4j-core-2.13.3.jar
log4j-web-2.13.3.jar
我的 log4j 配置在 WEB-INF/classes/log4j.properties
# Root logger option
log4j.rootLogger=DEBUG, file
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
#Redirect to Tomcat logs folder
log4j.appender.file.File=${catalina.base}/logs/my-application.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
在我的处理程序中,我创建了记录器并尝试记录一些信息,但它没有出现在任何地方。
@WebServlet(name = "MyServlet", urlPatterns = {"/test"}, loadOnStartup = 1)
public class MyServletextends HttpServlet {
private static final Logger logger = LogManager.getLogger(MyServlet.class);
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
logger.info("Test");
response.getWriter().print("Service is up and running!");
}
}
在localhost.2020-09-28.log
日志文件中,我收到一条消息说
28-Sep-2020 11:38:18.391 FINE [main] org.apache.catalina.core.StandardContext.filterStart Starting filter 'log4jServletFilter'
所以我假设 log4j 加载正确,至少我在任何日志文件中都没有发现任何错误。
为了能够使用 log4j 并将其输出到自己的文件中,我缺少什么配置?
解决方案
我发现问题在于我正在设置属性,就好像我使用的是 log4j,但实际上我使用的是 log4j2。
我通过将 -Dlog4j.debug 属性添加到 Tomcat 服务的启动来启用 log4j 调试发现了这一点。
这表明它正在寻找名称类似于 log4j2.properties 的属性文件。
我还必须更改属性文件的内容才能与 log4j2 一起使用。我使用了这个网站上的例子来帮助我创建一个新的属性文件。
推荐阅读
- linq - LINQ:向上遍历层次结构以检索父层次结构
- windows - 启动时的 Websocket 连接 ssl 问题(Windows)
- sql - 3 Table SQL JOIN with CASE
- android - RecycleView 中多视图类型的 Mutli LiveData 对象
- python - 混淆矩阵的图看起来很奇怪
- python - Glitch.com 与 Python
- assembly - 从 xml 文件中提取有用的信息。这些xml文件是制造商用来更新MCU的吗?
- azure-data-explorer - How to find an item in a json array using kusto
- javascript - 使用列表项的树视图,但单击事件不适用于动态创建的 HTML 内容
- typescript - 将新元素添加到数组时,使用 trackBy 嵌套 NgFor 不更新 html