首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Log4j2 Servlet附录

Log4j2 Servlet附录
EN

Stack Overflow用户
提问于 2022-01-18 17:44:25
回答 1查看 279关注 0票数 1

我使用Tomcat 10 (实际上是TomEE,但它在下面使用Tomcat 10 ),我正在尝试设置log4j2日志记录。我让这一半工作在控制台日志记录中进行(我在catalina.log中有日志输出)。我无法工作的是'Servlet‘附录。在log4j2文档中,我将此作为配置

代码语言:javascript
复制
<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里

代码语言:javascript
复制
    <context-param>
        <param-name>log4jContextName</param-name>
        <param-value>myblog</param-value>
    </context-param>

我部署了三个log4j2 jars,log4j-core、log4j-api和log4j-web,它的版本为2.17.1。

我在日志中看到了三个错误:

代码语言:javascript
复制
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

我看到这个

代码语言:javascript
复制
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"

顺便说一句,如果我将日志级别设置为在控制台附录中进行调试,就会得到类似的输出。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-18 19:24:45

由于Java 8和Jakarta 9之间的命名空间更改(cf )。例如,月食网站 )您需要使用log4j-jakarta-web而不是log4j-web

在Maven格式中,您需要:

代码语言:javascript
复制
<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

代码语言:javascript
复制
  <listener>
    <description>Initializes Log4j 2.x</description>
    <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
  </listener>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70760118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档