希望有一个简单的问题,但是我的谷歌foo让我失望 - 我有一个Maven项目,我们正在使用SLF4J和Log4J 1.2绑定。SLF4J和Log4j 2绑定Maven依赖关系
我们现在想移动到Log4j 2,特别是为了提高性能 - 然而,我不能为我的生活找到log4j 2.0绑定的maven依赖项。我在http://logging.apache.org/log4j/2.x/log4j-slf4j-impl/处发现了一些注释,但没有提及任何依赖关系信息。
我也稍微的事实混淆有明显把SLF4J上log4j2的顶部(绑定或适配器)
什么是绑定SLF4J与log4j2正确的方法以及如何定义Maven依赖两种方式?
编辑添加按照下面的第一个回答一些代码,我发现了异常:
Exception in thread "main" java.lang.NoSuchMethodError: org/apache/logging/log4j/spi/AbstractLoggerWrapper.(Lorg/apache/logging/log4j/spi/AbstractLogger;Ljava/lang/String;)V at 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>
and my tes牛逼的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");
}
}
谢谢,似乎我也需要log4j-api,但即使如此,slf4j在线程“main”java.lang.NoSuchMethodError:org/apache/logging/log4j/spi/AbstractLoggerWrapper中抛出异常。(Lorg/apache/logging/log4j/spi/AbstractLogger; Ljava/lang/String;)V –
对不起,我不小心误导了你,你不需要包含log4j api作为依赖项,因为log4j core和log4j slf4j实现都依赖于它,所以maven应该为你提供它们(我已经编辑了答案来反映这一点)。但是,您似乎正在使用'org.apache.logging.log4j.adapters:log4j-slf4j-impl:2.0-beta3'。试试'org.apache.logging.log4j:log4j-slf4j-impl:2.0-beta9'而不是 – Tegi
就是这样。我也跟踪了它的apache文档,我误读了链接,告诉你如何配置maven项目,并认为它是一个完全不同的东西的链接!在你和Apache文档之间,我现在正在工作。配置看起来更好,但并没有真正看到“快10倍”,但在大量线程的测试中,所有日志都像疯了似的,但我会坚持更详细的测试。再次感谢。 –