복붙노트

[SPRING] 어떻게하면 로깅을 얻을 수 있도록 Spring과 SLF4J를 구성 할 수 있습니까?

SPRING

어떻게하면 로깅을 얻을 수 있도록 Spring과 SLF4J를 구성 할 수 있습니까?

나는 로그인하려는 maven & spring 어플리케이션을 가지고있다. 나는 SLF4J를 사용하려고한다.

모든 설정 파일을 log4j.xml을 포함하는 디렉토리 {classpath} / config에 저장 한 다음 스프링 빈을 사용하여 초기화하려고합니다.

e.

<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetClass" value="org.springframework.util.Log4jConfigurer"/>
    <property name="targetMethod" value="initLogging"/>
    <property name="arguments">
        <list>
            <value>classpath:config/log4j.xml</value>
        </list>
    </property>
</bean>

그러나 나는이 경고 및 아무 기록도 얻지 않는다.

나는 주위를 봤는데이 설정에 간단한 예제를 찾을 수 없습니다. 어떤 아이디어?

해결법

  1. ==============================

    1.Jatin의 대답 외에도 :

    Jatin의 대답 외에도 :

    Spring은 Jakarta Commons Logging을 로깅 API로 사용한다. slf4j에 로깅하려면 commons-logging이 클래스 경로에 없는지 확인해야합니다. jcl-over-slf4j는 commons-logging의 대체 jar입니다.

    maven을 사용하고 있다면, mvn 의존성을 사용하여 commons-logging이 어디서 왔는지 탐지 할 수 있습니다 : 종속성 제외를 사용하여 의존성을 필요로하는 모든 종속성에서 트리를 제외하십시오. mvn 종속성을 실행해야 할 수도 있습니다. 트리는 전이 의존성의 첫 번째 발생만을 보여주기 때문에 여러 번 트리를 작성해야합니다.

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${org.springframework.version}</version>
      <exclusions>
        <exclusion>
          <artifactId>commons-logging</artifactId>
          <groupId>commons-logging</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    
  2. ==============================

    2.https://github.com/mbogoevici/spring-samples/tree/master/mvc-basic/trunk에서 예제를 찾을 수 있습니다. 로깅을 사용하려면 POM 파일에 몇 가지 종속성을 포함시켜야합니다.

    https://github.com/mbogoevici/spring-samples/tree/master/mvc-basic/trunk에서 예제를 찾을 수 있습니다. 로깅을 사용하려면 POM 파일에 몇 가지 종속성을 포함시켜야합니다.

    <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${org.slf4j.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
            <scope>runtime</scope>
        </dependency>
    
  3. ==============================

    3.완전성을 위해, 로그백 - 클래식 변종 :

    완전성을 위해, 로그백 - 클래식 변종 :

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.6.6</version>
        <scope>runtime</scope>
    </dependency>
    

    그러나 허용 된 (Stijn 's) 대답처럼 Spring 의존성에서 유래하는 commons-logging 의존성을 비활성화하는 것을 잊지 마십시오.

  4. ==============================

    4.classpath에서 JCL API 구현을 위해 블로우 구성을 사용하십시오.

    classpath에서 JCL API 구현을 위해 블로우 구성을 사용하십시오.

    <dependencies>
           <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-context</artifactId>
              <version>3.0.0.RELEASE</version>
              <scope>runtime</scope>
              <exclusions>
                 <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                 </exclusion>
              </exclusions>
           </dependency>
           <dependency>
              <groupId>org.slf4j</groupId>
              <artifactId>jcl-over-slf4j</artifactId>
              <version>1.5.8</version>
              <scope>runtime</scope>
           </dependency>
           <dependency>
              <groupId>org.slf4j</groupId>
              <artifactId>slf4j-api</artifactId>
              <version>1.5.8</version>
              <scope>runtime</scope>
           </dependency>
           <dependency>
              <groupId>org.slf4j</groupId>
              <artifactId>slf4j-log4j12</artifactId>
              <version>1.5.8</version>
              <scope>runtime</scope>
           </dependency>
           <dependency>
              <groupId>log4j</groupId>
              <artifactId>log4j</artifactId>
              <version>1.2.14</version>
              <scope>runtime</scope>
           </dependency>
        </dependencies> 
    

    더 자세한 정보는 여기를 확인하십시오.

  5. ==============================

    5.log4j 파일을 기본 패키지에 보관

    log4j 파일을 기본 패키지에 보관

  6. ==============================

    6.나는 logback 방식을 좋아하고, slf4j에 대해서도 비슷한 설정을한다.

    나는 logback 방식을 좋아하고, slf4j에 대해서도 비슷한 설정을한다.

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
        </dependency>
    

    slf4j-log4j12는 자동으로 slf4j-api와 log4j를 소개하므로 많은 의존성을 넣지 않아도됩니다.

  7. ==============================

    7.lazy-init = "false"를 추가하여 루트 컨텍스트에서 log4j 구성을 위해 bean을 열심히로드하십시오. 그러면 WARN 메시지가 해결됩니다. log4j : WARN 로거에 대한 appender를 찾을 수 없습니다.

    lazy-init = "false"를 추가하여 루트 컨텍스트에서 log4j 구성을 위해 bean을 열심히로드하십시오. 그러면 WARN 메시지가 해결됩니다. log4j : WARN 로거에 대한 appender를 찾을 수 없습니다.

    예:

    <bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" lazy-init="false">
    

    더 나은 접근 방법은 web.xml 또는 JVM 매개 변수 (-Dlog4j.configuration = ... / conf / log4j.xml 또는 'file :'접두어로 구성)를 -Dlog4j.configuration = file : conf로 사용하는 것입니다. 어떤 경우에는 /log4j.properties)

  8. from https://stackoverflow.com/questions/3387441/how-do-i-configure-spring-and-slf4j-so-that-i-can-get-logging by cc-by-sa and MIT license