2024-02-23
1. 방법
build.gradle
...
configurations {
configureEach { //기본 스프링의 로그백과의 충돌 방지를 위해 제외시킨다.
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
...
}
...
dependencies {
...
implementation "org.springframework.boot:spring-boot-starter-log4j2";
...
}
...
application.properties
...
#logging setting
logging.config=classpath:log4j2/log4j2-local.xml
...
log4j2-local.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!-- 해당 설정파일에서 사용하는 프로퍼티 해당 위치에 디렉토리 없으면 자동으로 만든다.-->
<Properties>
<property name="LOGS_PATH">/test/logs</property>
</Properties>
<Appenders>
<!-- 콘솔 로깅 -->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%style{[%d{yyyy-MM-dd HH:mm:ss}:%-3relative] }{white}%highlight{%level}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=cyan, TRACE=cyan} [%style{%t}{cyan}] %style{%logger{35}}{magenta}%n %style{[%l]}{blue}%n:LOG: %msg%n%throwable%n" />
</Console>
<!-- 파일 압축 기준-->
<RollingFile name ="RollingFile">
<FileName>${LOGS_PATH}/log4j2.log</FileName>
<FilePattern>${LOGS_PATH}/%d{yyyy-MM-dd}/log4j2.%d{yyyy-MM-dd}.%i.log.gz</FilePattern>
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %5p [%t] [%c] :LOG: %m%n%throwable</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10KB"/> <!--10MB 이상 시 압축-->
<TimeBasedTriggeringPolicy interval = "1" modulate = "true"/> <!--파일 패턴의 마지막 시간 패턴으로 인터벌이 계산됨 yyyy-MM-dd 이기 때문에 하루 기준 계산-->
</Policies>
<DefaultRolloverStrategy max="10000" fileIndex="min"/> <!--압축된 파일 최대 만개 그 이후는 오버라이딩 됨 첫번쨰 부터-->
</RollingFile>
</Appenders>
<Loggers>
<!-- Application Loggers -->
<!-- Root 설정보다 우선순위가 높으며 패키지별 개별 로그 지정 가능 -->
<logger name="com.example.exp.controller" level="INFO" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="RollingFile" />
</logger>
<logger name="com.example.exp.service" level="INFO" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="RollingFile" />
</logger>
<!-- FATAL, ERROR, WARN, INFO, DEBUG, TRACE -->
<Root level="INFO">
<AppenderRef ref="console" />
<AppenderRef ref="RollingFile" />
</Root>
</Loggers>
</Configuration>