[Spring Boot] log4j2 사용하기

SHINYEJI·2023년 12월 28일
0

Back-End

목록 보기
8/24

기본적으로 Spring Boot는 logback이라는 로깅 프레임워크를 제공한다.

그래서 로깅 설정을 하지않아도 Spring Boot 프로젝트를 실행하면 이렇게 알록 달록한 색상으로 로그가 찍히는 것을 확인할 수 있다.

log4j2를 권하는 것같아 Spring Boot 프로젝트에서 logback 대신 log4j2를 사용하는 방법을 정리하려고 한다.


logback을 사용할 때 library에는 logback-class,logback-core,spring-boot-starter-logger .jar파일을 의존하고 있다.

log4j2로 설정하는 방법

  1. 기본적으로 스프링부트가 사용하는 logback을 exclusion해주고, log4j2를 의존시켜야한다.
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!-- logback exclusion -->
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>

		</dependency>
		<!-- log4j2 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j2</artifactId>
		</dependency>

log4j2를 사용하게 설정한 후 library를 살펴보면 logback관련 .jar파일은 없어지고 log4j-core, spring-boot-starter-log4j2.jar 파일을 의존하는 것을 볼 수 있다.


  1. resouces폴더 밑에 log4j2.xml파일을 생성한 후 application.properties에 logging 설정 파일의 경로를 알려줘야 한다.
	logging.config=classpath:log4j2.xml
  1. 마지막으로 생성한 log4j2.xml에서 logging 설정 코드를 넣어주면 된다.
<?xml version="1.0" encoding="UTF-8"?>
<!-- status : log4j2 내부적으로 로그를 남기는데 이때 어떤 레벨로 로그를 만길지 지정하는 것이다-->
<!-- monitorInterval : 설정한 초단위 당 한 번씩 log4j2.xml이 변경되었는지 감지하여 재구동 없이 바로 적용시켜준다-->
<Configuration status="info" monitorInterval="30">
    <Properties>
        <!-- 동적으로 파일 path를 지정
            자바 시스템 프로터티의 filename을 읽어서 logs 밑에 filename(동적)이라는 이름으로 파일을 만들어 log를 찍는다
            만약 filename이 없다면 default.log라는 이름으로 파일을 만들겠다
        -->
        <Property name="filename">logs/${sys:filename:-default.log}</Property>
    </Properties>
    <!-- 1. 어떤 target에 로그를 출력할 것인지 정의한다.
         target: file,console, kafka
     2. 보낼 때 어떤 pattern으로 보내는지도 정의한다.-->
    <!-- 'name은 'ref'와 같아야 한다 -->
    <Appenders>
        <Console name="ConsoleLog" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <File name="FileLog" fileName="${filename}">
            <PatternLayout>
                <pattern>%d %p %C{1.} [%t] %m%n</pattern>
            </PatternLayout>
        </File>
    </Appenders>
    <!-- Appender를 실제로 매핑시켜주는 역할이다 -->
    <!-- 해당 name 위치의 logging 설정 -->
    <Loggers>

        <Logger name="com.ssafy.maytrip.controller" level="debug" additivity="false">
            <AppenderRef ref="ConsoleLog"/>
        </Logger>

        <Root level="info">
            <AppenderRef ref="ConsoleLog"/>
            <AppenderRef ref="FileLog"/>
        </Root>
    </Loggers>
</Configuration>

콘솔과 file에 지정한 log가 찍힌다.
filename을 지정하지 않았기 때문에 default.log파일에 log가 기록된는 것을 확인할 수 있다.


처음엔 문서만 보고 따라했지만 intellij에서 maven update를 처음 했는데 잘 되지 않아 시간을 끌었다. 유튜브에서 Ctrl+shift+O라는 단축어를 알려주기 전까지 내 maven이 왜 update되지 않는지 몰랐다. 애초에 업데이트 하는 방법을 잘못 된거 같다.

생각보다 logging 작업이 쉬워서 다음 프로젝트에 무리 없이 쓸 수 있겠다.


참고
https://www.youtube.com/watch?v=5dCIUMmJJR0
https://logging.apache.org/log4j/2.x/manual/configuration.html

0개의 댓글