当前位置: 首页 > 知识库问答 >
问题:

SLF4J和Log4j 2绑定Maven依赖项

贾越
2023-03-14

希望是一个简单的问题,但我的google foo让我失望了--我有一个maven项目,我们在其中使用了SLF4J和Log4J1.2绑定。

我们现在想要转移到Log4J2,特别是为了提高性能--但是,我一辈子都找不到Log4J2.0绑定的maven依赖项。我在http://logging.apache.org/log4j/2.x/log4j-SLF4j-impl/上找到了一些注释,但没有提到任何依赖关系信息。

在下面的第一个答案后面编辑添加一些代码,我得到了异常:

线程“main”java.lang.nosuchmethoderror出现异常:org/apache/logging/log4j/spi/abstractloggerwrapper。(lorg/apache/logging/log4j/spi/abstractlogger;ljava/lang/string;)V在org.slf4j.impl.slf4jlogger。(slf4jlogger.java:48)

POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>logging.test</groupId>
<artifactId>logtest2</artifactId>
<version>0.0.1</version>
<name>logtest2</name>
<description>logtest2</description>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j.adapters</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.0-beta3</version>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.0-beta9</version>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.0-beta9</version>
    </dependency>
</dependencies>

我的log4j.xml:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="A1" class="org.apache.log4j.FileAppender">
        <param name="File" value="c:/logtest2.0/log.txt" />
        <param name="Append" value="false" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %p %X{sessionId} %c MSG: %m%n" />
        </layout>
    </appender>
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %p %X{sessionId} %c MSG: %m%n" />
        </layout>
    </appender>
    <category name="org.apache.log4j.xml">
        <priority value="debug" />
        <appender-ref ref="A1" />
    </category>
    <root>
        <priority value="debug" />
        <appender-ref ref="STDOUT" />
    </Root> </log4j:configuration>

和我的测试java类:

package loggertest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LoggerTest {

    public static final Logger LOGGER = LoggerFactory.getLogger(LoggerTest.class);

    public static void main(final String[] p_args) throws InterruptedException {
        LOGGER.debug("Logger test");
    }
}

共有1个答案

孙经艺
2023-03-14
"org.apache.logging.log4j:log4j-slf4j-impl:2.0-beta9" - 
            LOG4J implementation of SLF4J API
"org.apache.logging.log4j:log4j-core:2.0-beta9" - Core LOG4J implementation

这一点,加上类路径上的一个有效log4j2.xml,您就应该开始了。

 类似资料:
  • 我有一个Maven项目,我想使用log4j2和slf4j。所以我添加了这个依赖项: 就我所知,它似乎起作用了。但我的问题是关于log4j-slf4j-impl的可传递依赖关系。 为什么IntelliJ显示log4j-core引入了log4j-api,但由于是重复的,所以忽略了它(我相信下面的截图是这么说的)?我该如何预防呢?

  • 但是,部署在同一台服务器上的一些其他项目使用Tomcat的lib目录中存在的slf4j和log4j库,我无法删除这些库。 Tomcat lib目录中存在的Slf4J和Log4J版本 SLF4J-API-1.4.2 当我从Tomcat的lib目录中删除这些库并使用project的pom中提到的库时,我的项目运行良好 当我注释项目的pom文件中的依赖项并使用下面Tomcat的lib中的依赖项时,会引发

  • 问题内容: 我在我的项目中使用log4j2和slf4j并使用maven进行构建。我正在使用以下pom文件(仅显示了相关依赖项),但是我在此pom文件的下面复制了错误- 我需要添加/删除所有内容才能使其正常工作。我已经访问了错误中的url以及log4j2依赖项页面,因此请不要仅仅指向响应中的URL。 信息: pom文件 更新: 我在pom文件中添加了以下依赖项,并且在mavenrepository中

  • 我正在为log4j2编写一个自定义包装器。使用https://logging.apache.org/log4j/2.x/manual/customloglevels.html#Customlogggers 要求是根据要记录的对象类型选择追加器。我想的方法是扩展log4j2记录器并覆盖log方法(如info),在这些方法中检查对象类型并调用所需的appender。 现在我想让我的应用程序使用slf4

  • 我想知道以下jar的所有传递依赖项: 将经典命令移动到pom。项目定义依赖关系和输入的xml: mvn依赖:树 将显示: 我没看到魔咒父母: 乍一看,mvn命令似乎可以显示非pom类型的依赖项。 有没有一种方法可以精确地显示使jar保持活动状态所需的每个文件? 谢谢

  • 我目前正在尝试用log4j/slf4j和java 11构建一个应用程序,但在运行时我面临这个问题: 此问题的根源代码是我的记录器的初始化: 我依赖于: org.apache.logging.log4j: log4j-api: 2.11.1 org.apache.logging.log4j: log4j-core: 2.11.1 org.apache.logging.log4j: log4j-slf