我正在使用 Tomcat 10(實際上是 TomEE,但它在下面使用 Tomcat 10)并且我正在嘗試設定 log4j2 日志記錄。我有這一半的作業發生在控制臺的日志記錄中(我在 catalina.log 中有日志輸出)。我無法作業的是“Servlet”附加程式。從 log4j2 檔案中,我將其作為我的配置
<Configuration status="DEBUG" name="MyBlog">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<Servlet name="Servlet">
<PatternLayout pattern="%m%n%ex{none}"/>
</Servlet>
</Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="Console"/>
<AppenderRef ref="Servlet"/>
</Root>
</Loggers>
</Configuration>
在我的 web.xml 我有
<context-param>
<param-name>log4jContextName</param-name>
<param-value>myblog</param-value>
</context-param>
我部署了三個 log4j2 jar,log4j-core、log4j-api 和 log4j-web,它的版本是 2.17.1。
我在日志中看到三個錯誤:
2022-01-18 17:42:59,381 http-nio-8080-exec-16 ERROR No servlet context is available
2022-01-18 17:42:59,383 http-nio-8080-exec-16 ERROR Null object returned for Servlet in Appenders.
2022-01-18 17:42:59,386 http-nio-8080-exec-16 ERROR Unable to locate appender "Servlet" for logger config "root"
感激地收到任何幫助
添加后 -Dlog4j2.debug=true
我看到這個
DEBUG StatusLogger ServletAppender$Builder(logThrowables="null", ignoreExceptions="null", PatternLayout(%m%n%ex{none}), name="Servlet", Configuration(MyBlog), Filter=null, ={})
ERROR StatusLogger No servlet context is available
DEBUG StatusLogger Building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin].
ERROR StatusLogger Null object returned for Servlet in Appenders.
DEBUG StatusLogger createAppenders(={Console, })
DEBUG StatusLogger Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
DEBUG StatusLogger createAppenderRef(ref="Console", level="null", Filter=null)
DEBUG StatusLogger Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
DEBUG StatusLogger createAppenderRef(ref="Servlet", level="null", Filter=null)
DEBUG StatusLogger Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger].
DEBUG StatusLogger createLogger(additivity="null", level="DEBUG", includeLocation="null", ={Console, Servlet}, ={}, Configuration(MyBlog), Filter=null)
DEBUG StatusLogger Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin].
DEBUG StatusLogger createLoggers(={root})
ERROR StatusLogger Unable to locate appender "Servlet" for logger config "root"
順便說一句,如果我在控制臺附加程式中將日志級別設定為 DEBUG,我會得到類似的輸出
uj5u.com熱心網友回復:
由于 Java EE 8 和 Jakarta EE 9 之間的命名空間更改(例如,參見Eclipse 網站),您需要log4j-jakarta-web使用log4j-web.
在 Maven 格式中,您需要:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jakarta-web</artifactId>
<version>2.17.1</version>
</dependency>
編輯:中似乎有一個小錯誤log4j-jakarta-web,阻止了ServletContainerInitializer啟動。我添加了PR #723。同時,您可以Log4jServletContextListener在您的web.xml:
<listener>
<description>Initializes Log4j 2.x</description>
<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/418731.html
標籤:
