💡 Spring Validation 구성을 위한 사용된 개발환경 입니다
개발 환경 | 버전 |
java | 17 |
Spring Boot | 3.3.3 |
빌드관리도구 | Gradle 8.8 |
개발 툴 | IntelliJ IDEA 2024.1 |
spring-boot-starter-validation | 3.3.3 |
1) Slf4j + Log4j2 라이브러리 적용하기
💡 로깅 프레임워크의 추상체(interface)인 Slf4j를 사용하며 구현체(implements)로 Log4j2를 통하여 로그를 구현합니다.
💡 spring-boot-starter-web 라이브러리 내에는 추상체로 Slf4j와 구현체 'Logback'을 내장하고 있어서 구현체(Logback)를 제외하고 적용합니다.
1. 빌드 관리도구에 라이브러리 종속성 제외
💡 spring-boot-starter-web 내에 기존에 추상체로 지정되어 있는 Logback을 제외합니다. 이는 충돌이 발생할 수 있기에 제외합니다.
💡 로깅 프레임워크의 추상체(interface)인 Slf4j를 사용하며 구현체(implements)로 Log4j2를 통하여 로그를 구현합니다.
💡 spring-boot-starter-web 라이브러리 내에는 추상체로 Slf4j와 구현체 'Logback'을 내장하고 있어서 구현체(Logback)를 제외하고 적용합니다.
💡 spring-boot-starter-web 내에 기존에 추상체로 지정되어 있는 Logback을 제외합니다. 이는 충돌이 발생할 수 있기에 제외합니다.
configurations {
// 내부 로깅 프레임워크(Logback)을 제외합니다.
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
2. 빌드 관리도구에 라이브러리 추가
💡 의존성에 spring-boot-starter-log4j2를 추가합니다.
dependencies {
implementation "org.springframework.boot:spring-boot-starter-log4j2"; // Spring Boot Log4j2
}
3. properties 파일 내에 로깅 설정을 합니다.
# logging slf4j
# .yml 버젼
logging.config=classpath:log4j2/log4j2-local.yml
# .xml 버젼
logging.config=classpath:log4j2/log4j2-local.xml
4. src/main/resoruce/log4j2/log4j2-local.xml 파일 내에 로그 환경설정을 합니다.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!-- 파일정보 -->
<Properties>
<Property name="infoLogNm">./logs/test/api_info.log</Property>
<Property name="errorLogNm">./logs/test/api_error.log</Property>
<Property name="authLogNm">./logs/test/api_auth.log</Property>
<Property name="jsonInfoLogNm">./logs/test/api_json_info.log</Property>
<Property name="layoutPattern">%style{%d{UTF-8}}{black} %highlight{%-5level} [%style{%t}{bright,blue}]
%style{%C}{bright,yellow}: %msg%n%throwable
</Property>
</Properties>
<!-- 생성 파일 정보 -->
<Appenders>
<Console name="Console_Appender" target="SYSTEM_OUT">
<PatternLayout pattern="${layoutPattern}"/>
</Console>
<!-- info level -->
<File name="File_Info_Appender">
<fileName>${infoLogNm}</fileName>
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
<!-- error level -->
<File name="File_Error_Appender">
<fileName>${errorLogNm}</fileName>
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
<!-- auth management -->
<File name="File_Auth_Appender">
<fileName>${authLogNm}</fileName>
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
<!-- json api info -->
<File name="File_Json_info_Appender">
<fileName>${jsonInfoLogNm}</fileName>
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
</Appenders>
<!-- 로그 범위 -->
<Loggers>
<!-- Spring 관련 로그 -->
<Logger name="org.springframework" additivity="false" level="INFO">
<AppenderRef ref="Console_Appender"/>
<AppenderRef ref="File_Info_Appender"/>
<!-- <AppenderRef ref="File_Error_Appender"/>-->
</Logger>
<!-- 프로젝트 로그 -->
<logger name="com.www.springlog4j2" additivity="false" level="DEBUG">
<AppenderRef ref="Console_Appender"/>
<AppenderRef ref="File_Info_Appender"/>
<AppenderRef ref="File_Auth_Appender"/>
<AppenderRef ref="File_Json_info_Appender"/>
</logger>
<!-- AUTH 관련 로그 -->
<logger name="com.www.springlog4j2.controller" additivity="false" level="INFO,DEBUG">
<AppenderRef ref="Console_Appender"/>
<!-- <AppenderRef ref="File_Info_Appender"/>-->
<AppenderRef ref="File_Error_Appender"/>
</logger>
<!-- Default 세팅 -->
<root additivity="false" level="OFF">
<AppenderRef ref="Console_Appender"/>
</root>
</Loggers>
</Configuration>
5. src/main/resoruce/log4j2/log4j2-local.yml 파일 내에 로그 환경설정을 합니다.
Configutation:
# 구성 이름
name: api
# [Properties] 설정에 사용되는 속성들을 정의
Properties:
Property:
- name: "log-path"
value: "./logs"
- name: "charset-UTF-8"
value: "UTF-8"
- name: "layout-pattern"
value: "%style{%d}{black} %highlight{%-5level} [%style{%t}{bright,blue}] %style{%C}{bright,yellow}: %msg%n%throwable"
- name: "info-log"
value: ${log-path}/api/api-info.log
- name: "error-log"
value: ${log-path}/api/api-error.log
- name: "auth-log"
value: ${log-path}/api/api-auth.log
- name: "json-log"
value: ${log-path}/api/api-json-info.log
# [Appenders] 로그 기록방식 정의
Appenders:
# [Appenders - Console] 콘솔에 로그를 출력하는 방식 정의
Console:
- name: console-appender
target: SYSTEM_OUT
PatternLayout:
pattern: ${layout-pattern}
# [Appenders - RollingFile] 로그를 파일들을 압축파일로 출력하는 방식 정의
RollingFile:
name: rolling-file-appender
fileName: ${log-path}/rolling-file-log.log
filePattern: "${log-path}/archive/rollingFile.log.%d{yyyy-MM-dd-hh-mm}_%i.gz"
PatternLayout:
charset: ${charset-UTF-8}
pattern: ${layout-pattern}
Policies:
SizeBasedTriggeringPolicy:
size: "200KB"
TimeBasedTriggeringPolicy:
interval: "1"
DefaultRollOverStrategy:
max: "30"
fileIndex: "max"
# [Appenders - File] 로그를 파일로 기록하는 방식 정의
File:
- name: file-info-appender
fileName: ${info-log}
PatternLayout:
pattern: "%d %p %C{1.} [%t] %m%n"
- name: file-error-appender
fileName: ${error-log}
PatternLayout:
pattern: "%d %p %C{1.} [%t] %m%n"
- name: file-auth-appender
fileName: ${auth-log}
PatternLayout:
pattern: "%d %p %C{1.} [%t] %m%n"
- name: file-json-info-appender
fileName: ${json-log}
PatternLayout:
pattern: "%d %p %C{1.} [%t] %m%n"
# [Loggers] 로그 출력 범위를 정의
Loggers:
# [Loggers - Root] 모든 로그를 기록하는 최상위 로그를 정의
Root:
level: OFF
AppenderRef:
- ref: console-appender
- ref: rolling-file-appender
# [Loggers - Loggers] 특정 패키지나 클래스에 대한 로그를 정의
Logger:
# 1. Spring Framework 로그 레벨 'INFO' 정의
- name: org.springframework
additivity: "false"
level: INFO
AppenderRef:
- ref: console-appender
# - ref: file-info-appender
- ref: file-error-appender
# 2. Spring Framework 로그 레벨 'DEBUG' 정의
- name: com.www.springlog4j2
additivity: "false"
level: DEBUG
AppenderRef:
- ref: console-appender
# - ref: file-info-appender
- ref: file-json-info-appender
- ref: file-auth-appender
# 3. MyBatis 관련 로그 레벨 특정 패키지 외에는 모두 OFF
- name: jdbc
level: OFF
- name: jdbc.sqlonly
level: OFF
- name: jdbc.sqltiming
level: INFO
- name: jdbc.resultsettable
level: OFF
- name: jdbc.audit
level: OFF
- name: jdbc.resultset
level: OFF
- name: jdbc.connection
level: OFF
5) 참고 : 프로젝트 내의 로그가 출력되지 않는 경우
⭐️ 주의 사항 ⭐️
💡 해당 파일에서 중요한 부분은 "com.pacakge.projectname" 해당 부분인데, build.gradle 파일 내에 group 속성에 해당하는 값을 복사하여서 추가하셔야 합니다.
💡 그래야 프로젝트에서 log.info / log.debug와 관련된 로그를 사용하였을 때 프로젝트 내의 콘솔에 찍히는 것을 확인할 수 있습니다.
# 적용한 github
https://github.com/eoog/blog/tree/main/spring-Log4j2
'Java > Spring' 카테고리의 다른 글
[Java] RabbitMq API 연결 (0) | 2024.08.26 |
---|---|
[Java] RabbitMq 설치 환경구성 설치 (0) | 2024.08.26 |
[Java] Firebase Cloud Message(FCM) 푸시 메시지 API (0) | 2024.08.26 |