- Log4j2 사용 배경
신입 1개월 차에 회사에서 Spring boot로 Proxy 서버를 만드는 과제를 받았다.
Proxy 서버의 기능이 어느정도 구현된 이후에 PO님께 미션을 받았다.
PO님 : 이제 이걸 백그라운드로 배포해야 하는데. log4j로 로그가 파일로 남기게 설정해주세요~
개발한 코드의 사후관리를 위해서는 모니터링이 꼭 필요하다.
이 모니터링을 위해서 애플리케이션의 로그를 파일로 남겨지도록 해야한다.
- Log4j2 적용 방법
1. build.gradle에 dependency 추가
Spring boot를 사용한다면 다음과 같이 dependency가 추가되어 있을 것이다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
Spring boot는 기본적으로 logback 로깅 모듈을 제공하기 때문에 이대로 사용한다면 log4j2와 충돌하여 오류를 맛볼 수 있다.
(logback을 사용해도 되지만 나는 log4j2가 더 성능이 좋아 log4j2를 사용하였다.)
그러므로 다음과 같은 코드를 추가하여 로깅 모듈을 제외시켜준다.
configurations {
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
그런 다음 log4j2 dependency를 추가
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
}
2. log4j2.xml 파일 설정
(1) resource 폴더 아래 log4j2.xml 파일 추가
application.yml에 설정 하나하나를 추가해도 되지만, 그렇게 되면 커스터마이징 하기 어려워진다.
다음과 같이 resource 폴더 아래 log4j2.xml 파일 추가한다. (나는 log4j2-live.xml로 추가함)
(2) application.properties에 log4j2.xml 추가
사전에 application.properties 파일에 log 설정 파일을 지정한다.
logging.config=classpath:log4j2-live.xml
(3) log4j2.xml 작성
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Properties>
<Property name="logFileName">daily-log</Property> //생성될 로그파일 이름
<Property name="BASE_DIR">/root/logs</Property> // 로그파일이 생성될 경로
//콘솔에 출력될 로그 레이아웃
<Property name="consoleLayout">%style{%d{ISO8601}}{black} %highlight{%-5level }[%style{%t}{bright,blue}] %style{%C{1.}}{bright,yellow}: %msg%n%throwable</Property>
<Property name="fileLayout">%d [%t] %-5level %c(%M:%L) - %m%n</Property> //생성될 로그 레이아웃
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${consoleLayout}" charset="UTF-8"/>
</Console>
<RollingFile name="file" fileName="logs/${logFileName}.log" filePattern="logs/${logFileName}.%d{yyyy-MM-dd}.log">
<PatternLayout pattern="${fileLayout}" />
<LevelRangeFilter minLevel="ERROR" maxLevel="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy modulate="true" interval="1" /><!-- 일별 로그 파일 생성-->
</Policies>
<DefaultRolloverStrategy max="25" fileIndex="min" >
<Delete basePath="${BASE_DIR}">
<IfFileName glob="*.log" />
<IfLastModified age="10d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<RollingFile name="errorFile" fileName="logs/${logErrorFileName}.log" filePattern="logs/${logErrorFileName}.%d{yyyy-MM-dd}.log">
<PatternLayout pattern="${fileLayout}" />
<LevelRangeFilter minLevel="ERROR" maxLevel="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy modulate="true" interval="1" /><!-- 일별 로그 파일 생성-->
</Policies>
<DefaultRolloverStrategy max="25" fileIndex="min" >
<Delete basePath="${BASE_DIR}">
<IfFileName glob="*.log" />
<IfLastModified age="10d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<Root level="ALL">
<AppenderRef ref="console"/>
</Root>
<!-- 스프링 프레임워크에서 찍는건 level을 info로 설정 -->
<logger name="com.osci.atlasagent" additivity="true" >
<AppenderRef ref="file"/>
<AppenderRef ref="errorFile"/>
</logger>
</Loggers>
</Configuration>
'java spring' 카테고리의 다른 글
War와 Jar 파일 차이점 (2) | 2023.12.26 |
---|---|
Spring Rest API Query Param Null 값이 들어오는 경우 처리 (0) | 2022.02.06 |
HttpClient WARNING: Cookie rejected: Illegal domain attribute 해결방법 (0) | 2022.01.30 |
자바 오버라이딩 오버로딩 (0) | 2021.12.16 |
자바의 클래스 멤버 변수 초기화 순서 (0) | 2021.12.16 |