목표: logback 설정 정리
로깅
- 시스템을 작동할 때 시스템의 작동 상태의 기록과 보존, 이용자의 습성 조사 및 시스
템 동작의 분석 등을 하기 위해 작동중의 각종 정보를 기록해둘 필요가 있다. 이 기록
을 만드는 것 - System.out.println: 상황별 구분 불가, 저장불가, 대량로그 시스템 성능문제
- 로깅 framework: Log4J, Logback, SLF4J
SLF4J
- Logging Framework들을 추상화해 놓은 것
- Facade Pattern을 이용
- Facade Pattern: 서브시스템을 거대한 클래스로 만들어 감싸서 편리한 인터페이스를 제공
- 바인딩 모듈(로깅 프레임워크 연결)을 통해 처리
Log Level
- trace
- debug
- info
- warn
- error
로거 생성: 로거 팩토리, 클래스 레벨에서
//사용
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//로거 생성해주기
//로거 이름을 통해서 로깅을 제어 com.example.order.LoggingTest
//클래스 이름으로 전달
private static final Logger log = LoggerFactory.getLogger(LoggingTest.class);
//이전 코드
System.out.println(MessageFormat.format("description->{0}", orderProperties.getDescription()));
//info레벨로 출력
//MessageFormat없이도 가능
//출력결과 09:54:23.584 [main] INFO com.example.order.LoggingTest - description->line 1 default
log.info("description->{}", orderProperties.getDescription());
//출력결과 09:54:23.584 [main] INFO com.example.order.LoggingTest - logger name=> com.example.order.LoggingTest
log.info("logger name=> {}", log.getName());
logback 설정
설정파일 찾는 순서
- logback-test.xml
- logback.groovy
- logback.xml
- 기본 설정 전략
사용
Logback 공식문서의 Basic configuration file를 복사
Logback manual
<configuration>
<!--색바꾸기-->
<conversionRule
conversionWord="clr"
converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<property name="CONSOLE_LOG_PATTERN" value="%clr(%d{HH:mm:ss.SSS}){red} [%thread] %-5level %logger{36} - %msg%n"/>
<!-- 패턴을 변수처럼 사용가능 -->
<property name="LOG_PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
<!-- 어디에 어떤 포맷으로 로그기록(콘솔, 파일..) -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 패턴지정 -->
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 로그파일로 생성 -->
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<!-- <file>logs/order.log</file> -->
<!-- 새로 구동 될 때마다 파일 생성 -->
<file>logs/order_${bySecond}.log</file>
<!-- 오버라이딩 -->
<append>false</append>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--파일 시간에 따라 자동 생성-->
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--현재: access.log 파일, 하루지나면 fileNamePattern 따라서 파일 생성-->
<file>logs/access.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/access-%d{yyyy.MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<logger name="com.example.order" level="debug">
<appender-ref ref="ROLLING_FILE" />
</logger>
<!-- additivity="false" 중첩방지 -->
<logger name="com.example.order" level="debug" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<!-- 또는 -->
<logger name="com.example.order" level="debug"/>
<!-- 루트:모든 레벨에 적용 -->
<root level="debug">
<!-- STDOUT: appender이름 -->
<appender-ref ref="STDOUT" />
</root>
</configuration>
@프로그래머스 미니 데브코스 & CNU SW Academy 강의 내용 정리
'모각코' 카테고리의 다른 글
[모각코 6회차] 주문관리 API (0) | 2022.08.11 |
---|---|
[모각코 5회차] SPA와 CORS (0) | 2022.08.04 |
[모각코 4회차] 스프링 AOP와 트랜잭션 (0) | 2022.07.29 |
[모각코 2회차] MySQL 고급기능 정리 (0) | 2022.07.15 |
[모각코 1회차] 숫자야구 (0) | 2022.07.08 |