2013-09-25 7 views
3

LogFJ와 Log4J 1.2 바인딩을 사용하는 maven 프로젝트가 있는데, 간단한 질문이지만 내 google foo가 실패합니다.SLF4J 및 Log4j 2 바인딩 Maven 종속성

이제 Log4j 2로 특히 성능 향상을 위해 이동하려고합니다. 그러나 필자의 삶은 log4j 2.0 바인딩에 대한 종속성을 찾을 수 없습니다. http://logging.apache.org/log4j/2.x/log4j-slf4j-impl/에서 몇 가지 노트를 발견했지만 종속성 정보는 언급하지 않았습니다.

나는 또한 약간 log4j2 위에

log4j2으로 SLF4J를 결합하는 올바른 방법은 무엇

어떻게 내가 받는다는 종속성이 정의합니까 (바인딩 또는 어댑터) SLF4J를 넣어하는 방법은 두 가지가 분명히있다는 사실에 의해 혼동 해요 ?

편집 아래의 첫번째 대답은 다음과 같은 몇 가지 코드를 추가 할 수있는, 내가 갖는 예외 :

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> 

및 내 테어 t 자바 클래스 :

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 core 및 log4j와 같이 log4j api를 종속성으로 포함 할 필요가 없습니다. 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

그걸로 끝났습니다. 또한 아파치 설명서를 추적 해 보았습니다. 메이븐 프로젝트를 구성하는 방법을 알려주는 링크를 잘못 읽고 완전히 다른 것으로 연결되었다고 생각했습니다! 너와 아파치 문서 사이에, 나는 지금 일하고있다. Config는 더 멋지지만 실제로는 "10 배 더 빠름"을 보지 못했습니다. 많은 수의 스레드를 가진 테스트에서 미친 듯이 모든 로깅을 테스트하지만 더 자세한 테스트를 수행 할 것입니다. 다시 한번 감사드립니다. –

관련 문제