Java 使用单个log4j2xml文件配置log4j2和log4j

Java 使用单个log4j2xml文件配置log4j2和log4j,java,logging,log4j,log4j2,Java,Logging,Log4j,Log4j2,我已经将应用程序迁移到log4j2,并通过log4j2.xml对其进行了配置 然而,我使用的一些库依赖于log4j1。如果我使用以下命令运行应用程序: -Dlog4j.configurationFile=path/to/log4j2.xml log4j1抱怨没有找到配置文件。我正在使用log4j2提供的log4j1.x桥,log4j-1.2-api-2.0-rc1.jar。是否可以使用一个log4j2.xml来配置这两者 我尝试过的另一种方法是同时配置log4j和log4j2: -Dlog4j

我已经将应用程序迁移到log4j2,并通过log4j2.xml对其进行了配置

然而,我使用的一些库依赖于log4j1。如果我使用以下命令运行应用程序:

-Dlog4j.configurationFile=path/to/log4j2.xml
log4j1抱怨没有找到配置文件。我正在使用log4j2提供的log4j1.x桥,log4j-1.2-api-2.0-rc1.jar。是否可以使用一个log4j2.xml来配置这两者

我尝试过的另一种方法是同时配置log4j和log4j2:

-Dlog4j.configurationFile=path/to/log4j2.xml -Dlog4j.configuration=path/to/log4j.xml
我关心的是日志配置文件和输出的碎片。我还担心log4j.xml和log4j2.xml之间可能存在的冲突。e、 g.logfile error.log配置为使用log4j 1中的FileAppender和log4j 2中的RollingFileAppender

有什么建议吗

[注]

这就是我看到的错误:

log4j:WARN No appenders could be found for logger (org.apache.activemq.util.ThreadPoolUtils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
我使用的log4j2版本是log4j2.0rc1

[答复]


似乎activemq-5.8.0.jar与log4j 1捆绑在一起。解决方案只是在activemq之前加载log4j 1.x桥。

我建议使用log4j2发行版中包含的log4j-1.2适配器。这样,任何编码到log4j-1.2api的库都将与log4j2一起工作,而无需任何代码更改

您的类路径应该包括:

  • log4j-api-2.6.1.jar
  • log4j-core-2.6.1.jar
  • log4j-1.2-api-2.6.1.jar
  • log4j2.xml
您的类路径应该而不是包括:

  • log4j-1.2.x.jar
  • log4j.properties或log4j.xml(无论如何log4j2都会忽略这些)

另请参见

在使用log4j2的maven项目中,可以在pom中将log4j从使用它的模块中排除,以使log4j2能够接管:

<dependencies>
    <dependency>
        <groupId>commons-configuration</groupId>
        <artifactId>commons-configuration</artifactId>
        <version>1.4</version>
        <!--force usage of log4j2-->
        <exclusions>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-1.2-api</artifactId>
        <version>2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-web</artifactId>
        <version>2.3</version>
    </dependency>
</dependencies>

共用配置

我已经在类路径中使用了log4j-1.2-api-2.0.jar。在我的类路径中根本没有log4j-1.2.x.jar。我使用了您在上面推荐的方法,但是log4j仍然抱怨没有正确配置。抱歉,如果我在最初的问题中不清楚,我会更新以反映这一点。如果类路径中没有log4j-1.2.x.jar,那么log4j-1.2怎么还能抱怨(进行抱怨的类不应该在类路径上)?我相信这是由于log4j 1.x桥引起的。实际上,使用错误的jar文件是我的错,我也发现了这一点。非常感谢您的建议=)@Viorel我当时使用的是activemq all,当时我真的应该按照要求使用各个库,即activemq客户端、activemq核心、activemq代理等,所以您会将其保留在列表中,但同时您会在中定义它,并以这种方式工作?@kensai Yes,您添加了log4j2依赖项,但是在应该使用log4j(而不是log4j2)的依赖项中,您添加了排除项?或者它的用途是什么?我实际上有一个平台,默认情况下只使用log4j(没有本地log4j2支持),我尝试将它设置为log4j路由到log4j2,并尝试正确设置maven pom.xml。有了公认的答案,剩下的问题是你提到的排除在哪里。谢谢。