|
|
|
|
@ -345,78 +345,49 @@ bootWar {
|
|
|
|
|
|
|
|
|
|
<h3 id="logback-spring-xml">4.6 logback-spring.xml</h3>
|
|
|
|
|
|
|
|
|
|
로깅 설정을 정의하는 파일입니다.
|
|
|
|
|
애플리케이션의 로깅 정책을 설정합니다. `logback-spring.xml`은 Spring Profiles (`local`, `dev`, `prd`)와 연동하여 환경별로 다른 로깅 전략을 사용합니다.
|
|
|
|
|
|
|
|
|
|
**주요 로깅 전략:**
|
|
|
|
|
|
|
|
|
|
1. **Appenders (로그 출력 위치):**
|
|
|
|
|
* `CONSOLE_COLOR`: 로컬/개발 환경에서 색상이 적용된 로그를 콘솔에 출력합니다.
|
|
|
|
|
* `CONSOLE`: 운영 환경에서 표준 콘솔 출력을 담당합니다.
|
|
|
|
|
* `ASYNC_FILE`: 모든 환경에서 비동기적으로 파일에 로그를 기록하여 성능 저하를 최소화합니다. 로그 파일은 `application-{profile}.yml`에 정의된 경로에 저장됩니다.
|
|
|
|
|
|
|
|
|
|
2. **Log Pattern (로그 형식):**
|
|
|
|
|
* 로그는 `시간 [스레드] 로그레벨 로거 - 메시지` 형식으로 기록됩니다.
|
|
|
|
|
* 예: `2025-08-13 10:00:00.123 [http-nio-8080-exec-1] INFO go.kr.project.main.MainController - Main page access`
|
|
|
|
|
|
|
|
|
|
3. **Rolling Policy (로그 파일 관리):**
|
|
|
|
|
* 로그 파일은 `10MB`에 도달하면 분할됩니다.
|
|
|
|
|
* 로그 파일은 최대 30일 동안 보관됩니다.
|
|
|
|
|
|
|
|
|
|
4. **Profile-specific Levels (환경별 로그 레벨):**
|
|
|
|
|
* **local, dev:** `INFO` 레벨을 기본으로 사용하며, `go.kr.project` 패키지는 `DEBUG` 레벨로 설정하여 상세한 디버깅이 가능합니다.
|
|
|
|
|
* **prd:** `WARN` 레벨을 기본으로 사용하여, 경고 및 오류 로그만 기록합니다.
|
|
|
|
|
|
|
|
|
|
**예시 (Appender 설정 부분):**
|
|
|
|
|
```xml
|
|
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
|
<configuration>
|
|
|
|
|
<!-- 기본 로그 경로 및 파일명 설정 -->
|
|
|
|
|
<springProperty scope="context" name="LOG_PATH" source="logging.file.path" defaultValue="logs" />
|
|
|
|
|
<springProperty scope="context" name="LOG_FILE" source="logging.file.name" defaultValue="application" />
|
|
|
|
|
<springProperty scope="context" name="MAX_FILE_SIZE" source="logging.logback.rollingpolicy.max-file-size" defaultValue="10MB" />
|
|
|
|
|
<springProperty scope="context" name="MAX_HISTORY" source="logging.logback.rollingpolicy.max-history" defaultValue="30" />
|
|
|
|
|
|
|
|
|
|
<!-- 콘솔 출력 설정 -->
|
|
|
|
|
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
|
|
|
|
<encoder>
|
|
|
|
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
|
|
|
|
</encoder>
|
|
|
|
|
</appender>
|
|
|
|
|
|
|
|
|
|
<!-- 컬러 콘솔 출력 설정 (개발 환경용) -->
|
|
|
|
|
<appender name="CONSOLE_COLOR" class="ch.qos.logback.core.ConsoleAppender">
|
|
|
|
|
<encoder>
|
|
|
|
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) [%thread] %cyan(%logger{36}) - %msg%n</pattern>
|
|
|
|
|
</encoder>
|
|
|
|
|
</appender>
|
|
|
|
|
|
|
|
|
|
<!-- 파일 출력 설정 -->
|
|
|
|
|
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
|
|
|
|
<file>${LOG_PATH}/${LOG_FILE}</file>
|
|
|
|
|
<encoder>
|
|
|
|
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
|
|
|
|
</encoder>
|
|
|
|
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
|
|
|
|
<fileNamePattern>${LOG_PATH}/${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
|
|
|
|
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
|
|
|
|
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
|
|
|
|
</timeBasedFileNamingAndTriggeringPolicy>
|
|
|
|
|
<maxHistory>${MAX_HISTORY}</maxHistory>
|
|
|
|
|
</rollingPolicy>
|
|
|
|
|
<prudent>true</prudent>
|
|
|
|
|
</appender>
|
|
|
|
|
|
|
|
|
|
<!-- 비동기 파일 출력 설정 -->
|
|
|
|
|
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
|
|
|
|
|
<appender-ref ref="FILE" />
|
|
|
|
|
<queueSize>512</queueSize>
|
|
|
|
|
<discardingThreshold>0</discardingThreshold>
|
|
|
|
|
<includeCallerData>false</includeCallerData>
|
|
|
|
|
<neverBlock>false</neverBlock>
|
|
|
|
|
</appender>
|
|
|
|
|
|
|
|
|
|
<!-- 환경별 설정 -->
|
|
|
|
|
<springProfile name="local">
|
|
|
|
|
<root level="INFO">
|
|
|
|
|
<appender-ref ref="CONSOLE_COLOR" />
|
|
|
|
|
<appender-ref ref="ASYNC_FILE" />
|
|
|
|
|
</root>
|
|
|
|
|
</springProfile>
|
|
|
|
|
|
|
|
|
|
<springProfile name="dev">
|
|
|
|
|
<root level="INFO">
|
|
|
|
|
<appender-ref ref="CONSOLE_COLOR" />
|
|
|
|
|
<appender-ref ref="ASYNC_FILE" />
|
|
|
|
|
</root>
|
|
|
|
|
</springProfile>
|
|
|
|
|
|
|
|
|
|
<springProfile name="prd">
|
|
|
|
|
<root level="WARN">
|
|
|
|
|
<appender-ref ref="CONSOLE" />
|
|
|
|
|
<appender-ref ref="ASYNC_FILE" />
|
|
|
|
|
</root>
|
|
|
|
|
</springProfile>
|
|
|
|
|
</configuration>
|
|
|
|
|
<!-- 콘솔(컬러) Appender 예시 -->
|
|
|
|
|
<appender name="CONSOLE_COLOR" class="ch.qos.logback.core.ConsoleAppender">
|
|
|
|
|
<encoder>
|
|
|
|
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) [%thread] %cyan(%logger{36}) - %msg%n</pattern>
|
|
|
|
|
</encoder>
|
|
|
|
|
</appender>
|
|
|
|
|
|
|
|
|
|
<!-- 파일 Appender 예시 -->
|
|
|
|
|
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
|
|
|
|
<file>${LOG_PATH}/${LOG_FILE}.log</file> <!-- yml 파일의 속성 사용 -->
|
|
|
|
|
<encoder>
|
|
|
|
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
|
|
|
|
</encoder>
|
|
|
|
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
|
|
|
|
<!-- 10MB 마다 롤링 -->
|
|
|
|
|
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
|
|
|
|
<!-- 30일 보관 -->
|
|
|
|
|
<maxHistory>${MAX_HISTORY}</maxHistory>
|
|
|
|
|
</rollingPolicy>
|
|
|
|
|
</appender>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
<h3 id="mybatis-config-xml">4.7 mybatis-config.xml</h3>
|
|
|
|
|
|