programing

Spring 및 SLF4J를 구성하여 로깅을 가져오려면 어떻게 해야 합니까?

goodsources 2023. 8. 24. 22:00
반응형

Spring 및 SLF4J를 구성하여 로깅을 가져오려면 어떻게 해야 합니까?

로그인하고 싶은 메이븐 & 스프링 앱이 있습니다.SLF4J를 사용하고 싶습니다.

모든 구성 파일을 log4j.xml을 포함한 {classpath}/config 디렉토리에 넣은 다음 스프링 빈을 사용하여 초기화합니다.

예.

<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>

그러나 이 경고는 표시되고 기록은 표시되지 않습니다.

log4j:WARN 로거(org.springframework.context)에 대한 추가 프로그램을 찾을 수 없습니다.지지하다.ClassPathXmlApplicationContext)입니다.log4j:경고 log4j 시스템을 올바르게 초기화하십시오.log4j:경고 자세한 내용은 http://logging.apache.org/log4j/1.2/faq.html#noconfig 을 참조하십시오.

검색해 봤는데 이 설정에 대한 간단한 예를 찾을 수 없습니다.아이디어 있어요?

Jatin의 대답 외에도:

Spring은 Jakarta Commons Logging을 로깅 API로 사용합니다.slf4j에 로그인하려면 다음 사항을 확인해야 합니다.commons-logging클래스 경로에 없습니다.jcl-over-slf4j커먼즈를 대체하는 병입니다.

메이븐을 사용하는 경우, 커먼 로깅이 사용되는 위치를 탐지할 수 있습니다.mvn dependency:tree종속성 제외를 사용하여 필요한 모든 종속성에서 제외합니다.실행해야 할 수도 있습니다.mvn dependency:tree그러나, 그것은 전이 의존성의 첫 번째 발생만을 보여주기 때문에 여러 번.

<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>

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>

단지 완전성을 위해서, a.logback-classic변형:

<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>

그러나 수용된 (스티인의) 대답처럼 봄 의존성에서 싹트는 의존성을 비활성화하는 것을 잊지 마십시오.

의 구현을 위해 블로우 구성 사용JCL API에서classpath:

<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> 

자세한 내용은 여기를 참조하십시오.

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

저는 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를 자동으로 도입하므로 그렇게 많은 종속성을 둘 필요가 없습니다.

그냥 추가lazy-init="false"루트 컨텍스트에서 log4j 구성을 위한 빈을 열심히 로드합니다.그러면 경고 메시지가 해결될 것입니다.log4j:WARN No appenders could be found for logger

예:

<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경우에 따라)

언급URL : https://stackoverflow.com/questions/3387441/how-do-i-configure-spring-and-slf4j-so-that-i-can-get-logging

반응형