Dev/Spring

Spring[Logging]

OK-가자 2021. 10. 17. 14:02

Spring[Logging]

1. 로깅이란?

  • 비 기능적 요구사항 ( Non Functional Requirement )
  • 하지만, 프로그램 개발 중 디버깅 및 개발완료 후 문제점 추적 및 분석을 위해 필수적으로 갖추어야 할 요구 조건
  • 로그(Log) 는 프로그램 개발이나 운영 시 발생하는 문제점을 추적 하거나 운영 상태를 모니터링 하는 정보
  • 로깅(logging)이란 로그(log)를 생성하도록 시스템을 작성하는 활동
  • 얻을 수 있는 것
    1. 재현하기 힘든 ( 테스트 환경이 아닌 개발 완료된 환경에서 발생하는 ) 버그에 대한 유용한 정보를 제공
    2. 성능에 관한 통계와 정보를 제공할 수 있다.

2. 자바 로깅

  • java.util.logging
  • Apache 의 (J)arkarta (C)ommons (L)ogging
  • Log4J
  • Log4J의 성능과 기능상의 이유로 대체 로거들이 많아짐
  • 자바 로거의 표준과 일관된 인터페이스가 필요.

  • SLF4J ( Simple Logging Façade )
  • Logback( SLF4J의 구현체 중 하나)
    1. Log4J 보다 속도와 메모리 사용량이 개선
    2. XML & Groovy 설정 지원 ( 자동 리로딩 기능 )
    3. 다양한 Appender ( console, file, socket, JDBC )
    4. Rolling & Archiving ( 자동 압축 )
    5. HTTP 디버깅 ( logback-access 컴포넌트 )

3. Logback 라이브러리 추가

1) 버전 정보

<properties>
    <org.springframework-version>4.0.3.RELEASE</org.springframework-version>
    <jcloverslf4j.version>1.7.6</jcloverslf4j.version>        
    <logback.version>1.1.1</logback.version>
</properties>

2) SLF4J 기반의 Logback 라이브러리를 로거로 사용할 것이기 때문에 JCL은 제외시킨다.

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

3) JCL-over-SLF4J 라이브러리 추가

JCL를 제외 시켰기 때문에 기존 Commons Logging 을 통해 로그를 남기는 코드들은 에러를 발생 시킨다. 이를 이어 주어야 하는 다리 또는 일종의 어댑터가 필요하다.

<dependency>                                    
   <groupId>org.slf4j</groupId>                
   <artifactId>jcl-over-slf4j</artifactId>     
   <version>${jcloverslf4j.version}</version>  
</dependency>

4) SLF4J의 구현체인 Logback 라이브러리 추가

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>${logback.version}</version>
</dependency>

4. Logback 설정

  • Console Appender
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
     <encoder>
      <Pattern>.%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %n</Pattern>
     </encoder>
     <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>TRACE</level>
     </filter>
    </appender>
  • Rolling File Appender
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
   <encoder>
    <Pattern>.%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %n</Pattern>
   </encoder>
   <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>TRACE</level>
   </filter>
</appender>

'Dev > Spring' 카테고리의 다른 글

Spring[AOP - Aspect Oriented Programming]  (0) 2021.10.17
Spring[@Valid]  (0) 2021.10.17
Spring[MultipartResolver]  (0) 2021.10.16
Spring[Interceptor-Annotation활용]  (0) 2021.10.16
Spring [DefaultServlet-ViewResolver-Exception]  (0) 2021.10.16