2013-09-25 34 views
3

希望有一個簡單的問題,但是我的谷歌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"); 
    } 
} 

回答

1
"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應該讓你開始。

+1

謝謝,似乎我也需要log4j-api,但即使如此,slf4j在線程「main」java.lang.NoSuchMethodError:org/apache/logging/log4j/spi/AbstractLoggerWrapper中拋出異常。(Lorg/apache/logging/log4j/spi/AbstractLogger; Ljava/lang/String;)V –

+0

對不起,我不小心誤導了你,你不需要包含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

+0

就是這樣。我也跟蹤了它的apache文檔,我誤讀了鏈接,告訴你如何配置maven項目,並認爲它是一個完全不同的東西的鏈接!在你和Apache文檔之間,我現在正在工作。配置看起來更好,但並沒有真正看到「快10倍」,但在大量線程的測試中,所有日誌都像瘋了似的,但我會堅持更詳細的測試。再次感謝。 –