Spring[Logging]
1. 로깅이란?
- 비 기능적 요구사항 ( Non Functional Requirement )
- 하지만, 프로그램 개발 중 디버깅 및 개발완료 후 문제점 추적 및 분석을 위해 필수적으로 갖추어야 할 요구 조건
- 로그(Log) 는 프로그램 개발이나 운영 시 발생하는 문제점을 추적 하거나 운영 상태를 모니터링 하는 정보
- 로깅(logging)이란 로그(log)를 생성하도록 시스템을 작성하는 활동
- 얻을 수 있는 것
- 재현하기 힘든 ( 테스트 환경이 아닌 개발 완료된 환경에서 발생하는 ) 버그에 대한 유용한 정보를 제공
- 성능에 관한 통계와 정보를 제공할 수 있다.
2. 자바 로깅
- java.util.logging
- Apache 의 (J)arkarta (C)ommons (L)ogging
- Log4J
- Log4J의 성능과 기능상의 이유로 대체 로거들이 많아짐
-
자바 로거의 표준과 일관된 인터페이스가 필요.
- SLF4J ( Simple Logging Façade )
- Logback( SLF4J의 구현체 중 하나)
- Log4J 보다 속도와 메모리 사용량이 개선
- XML & Groovy 설정 지원 ( 자동 리로딩 기능 )
- 다양한 Appender ( console, file, socket, JDBC )
- Rolling & Archiving ( 자동 압축 )
- 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 |