반응형
2023.08.04 - [자바(Java)] - Java 로깅 알아보기 1 - Logging이란
기본적인 내용은 이전 글을 통해 확인하는 것을 추천!
Log4j 구조
- Logger : 로그의 주체, 로그의 메시지 전달, 특정 패키지 안의 특정 레벨 이상만 출력
- Appender: 어디에 출력할지에 대해 기술
- Encoder: 어떻게 출력할지에 대해 기술
Logback 환경 설정 (logback.xml)
resources 하단에 logback.xml 파일 생성
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOGS_ABSOLUTE_PATH" value="./logs" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="com.example.test.config.LogbackFilter"/>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %highlight([%-5p]) --- [%F]%M\\(%L\\) : %m%n</pattern>
</encoder>
</appender>
<logger name="com.example" level="DEBUG" />
<logger name="com.zaxxer.hikari.HikariDataSource" level="error"/>
<logger name="com.example.test.mapper.**" level="error"/>
<logger name="org.springframework" level="error"
additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<root level="INFO" >
<appender-ref ref="STDOUT" />
</root>
</configuration>
- <property name="LOGS_ABSOLUTE_PATH" value="./logs" /> 속성 설정
- appender 부분은 출력위치를 결정해 주고 (STDOUT), Appender로 사용할 클래스를 설정해 주는 부분이다.
- filter는 로그를 남길 때 사용할 필터를 설정한다.
- encoder는 어떠한 형태로 출력할지 결정해 준다.
- logger는 각 패키지에서 어떤 레벨 이상의 로그를 출력할지 선택
- root는 logger에 해당되지 않는 이외에서 동작할 레벨을 선택 (default)
Conversion Word
https://logback.qos.ch/manual/layouts.html#conversionWord
- C{length}, lo{length}, logger{length}length가 로거의 이름보다 짧아도 가장 오른쪽 세그먼트의 길이는 축약되지 않는다.
- %logger - mainPackage.sub.sample.Bar
- %logger{0} - Bar
- %logger{5} - m.s.s.Bar
- %logger{10} - m.s.s.Bar
- %logger{15} - m.s.sample.Bar
- %logger{16} - m.sub.sample.Bar
- %logger{26} - mainPackage.sub.Bar
- ex) mainPackage.sub.sample.Bar라는 로거를 사용할 때
- : 로거 이벤트를 출력하는 로거의 이름
- contextName, cn
- : 이벤트의 출처에 있는 로거가 포함되어 있는 콘텍스트의 이름 출력
- d{pattern}, date{pattern}, d{pattern, timezone}, date{pattern, timezone}, d{pattern, timezone, locale}, date{pattern, timezone, locale}DateTimeFormatter 형식과 호환된다.
- %d - 2006-10-20 14:06:49,812
- %date - 2006-10-20 14:06:49,812
- %date{ISO8601} - 2006-10-20 14:06:49,812
- %date{dd MMM yyyy;HH:mm:ss.SSS} - 20 oct. 2006; 14:06:49.812
- ex) 날짜가 2006년 10월 20일 금요일일 때
- : 로깅 이벤트의 날짜 출력
- F, file
- : 로깅이 발생한 Java 소스 파일의 이름 (성능 저하)
- caller{depth}, caller{depthStart..depthEnd}, caller{depth, evaluator-1, ... evaluator-n}, caller{depthStart..depthEnd, evaluator-1, ... evaluator-n} 일반적으로 호출 메서드의 정규화된 이름, 호출자의 소스, 파일이름 및 괄호 사이의 줄 번호
- %caller{2} -
- 0 [main] DEBUG - logging statement Caller+0 at mainPackage.sub.;sample.Bar.sampleMethodName(;Bar.java:22) Caller+1 at mainPackage.sub.;sample.Bar.createLoggingRequest(;Bar.java:17)
- %caller{3}
- 16 [main] DEBUG - logging statement Caller+0 at mainPackage.sub.;sample.Bar.sampleMethodName(;Bar.java:22) Caller+1 at mainPackage.sub.;sample.Bar.createLoggingRequest(;Bar.java:17) Caller+2 at mainPackage.ConfigTester.;main(ConfigTester.;java:38)
- caller{1..2}
- 0 [main] DEBUG - logging statement Caller+0 at mainPackage.sub.;sample.Bar.createLoggingRequest(;Bar.java:17)
- L, Line
- 로깅 이벤트가 발생한 줄 번호 (성능 저하)
- m, msg, message
- : 로깅 메시지 출력
- M, method
- : 로깅을 요청한 메서드 이름 (성능 저하)
- n
- : 개행 문자 삽입 (줄 바꿈)
- p, le, level
- 이벤트의 레벨 (DEBUG, WARN, ERROR 등…)
- ex)
- : 로깅 이벤트를 발생시킨 호출자의 위치 정보
포맷 지정하기
https://logback.qos.ch/manual/layouts.html#formatModifiers
- 양수는 왼쪽 음수는 오른쪽 정렬
- 0 이상 자리는 미만일시 채우기, 소수점 자리는 초과하면 자르기
- ex)
- 또한 그룹으로도 지정할 수 있다 https://logback.qos.ch/manual/layouts.html#grouping
%-30(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n
- ex)
컬러 지정하기
https://logback.qos.ch/manual/layouts.html#coloring
레벨에 따라 자동적으로 컬러를 지정되도록 하고 싶다면 %highlight 사용
ex)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration>
<configuration debug="true">
<import class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"/>
<import class="ch.qos.logback.core.ConsoleAppender"/>
<appender name="STDOUT" class="ConsoleAppender">
<withJansi>true</withJansi>
<encoder class="PatternLayoutEncoder">
<pattern>[%thread] %highlight(%-5level) %cyan(%logger{15}) -%kvp -%msg %n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
logback.xml vs logback-spring.xml
그냥 logback은 spring이 시작되기 전에 로드되기 때문에 application.properties(.yml)의 정보를 읽을 수 없다.
로그 레벨 중요도
TRACE < DEBUG < INFO < WARN < ERROR
반응형
'Language > Java' 카테고리의 다른 글
엑셀 생성 기능 리팩토링하기 (0) | 2023.09.08 |
---|---|
enum 클래스 활용하기 (0) | 2023.09.06 |
Java 로깅 알아보기 1 - Logging이란 (0) | 2023.08.04 |
Bean, VO, DTO, Entity 구분하기 (0) | 2023.07.26 |
Gradle을 이용한 순수 자바 Jar 만들기 (0) | 2023.06.20 |