【问题标题】:Why Log4j thinks my project run in Servlet Environment为什么 Log4j 认为我的项目在 Servlet 环境中运行
【发布时间】:2016-09-17 14:03:26
【问题描述】:

我有一个简单的 java 项目(maven)。它构建了一个 jar,我们在其上执行 main 方法。但是当我在项目上运行 mvn clean test 时,我从 log4j 得到一条日志行,说

INFO Log4j appears to be running in a Servlet environment, but there's no log4j-web module available. If you want better web container support, please add the log4j-web JAR to your web archive or server lib directory.

log4j2.xml 文件位于src/main/resources/log4j2.xml

有什么想法吗?

【问题讨论】:

标签: java maven log4j log4j2


【解决方案1】:

我在使用依赖时遇到了同样的问题:

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>connect-json</artifactId>
    <version>2.0.1</version>
</dependency>

当我还包含依赖项时,我可以解决它:

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>2.0.0</version>
</dependency>

到 pom.xml 文件。 我在这里没有太多说明,但这就是我在 Kafka 客户领域工作时遇到的问题。希望对某人有所帮助。

【讨论】:

    【解决方案2】:

    如果您的类路径中有servlet-api Jar,Log4j 会认为您在 Servlet 容器中运行。具体来说,它会寻找javax.servlet.ServletContext 的存在。如果您的应用程序没有在 Servlet 容器中运行,那么您真的不需要那个 Jar。

    【讨论】:

    • 我们使用带有 servlet-api 注释的接口进行 open-feign。所以是的,在某些情况下,当您不在 servlet 容器中运行时,您需要使用 servelt-api。
    【解决方案3】:

    同样,如果您说将其作为 JUnit 测试的一部分加载并希望消除错误,那么您始终可以像这样包含该文件:

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-web</artifactId>
        <version>2.6.2</version>
        <scope>test</scope>
    </dependency>
    

    请注意,范围已设置为测试,因此该文件不会包含在任何构建工件中。

    还要注意,这个“错误”实际上只是设置在“信息”级别,所以 log4j 将继续提供非网络支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多