Java

[Spring Boot] Logback 사용한 원하는 위치게 로그 파일 생성 방법

cob 2024. 5. 17. 21:09

 

 

Logback을 사용하면 간단하게 로그 관리를 할 수 있다. 로그 파일 생성, 일자별 생성, 파일 사이즈 기반 롤링 등 다양한 옵션을 제공하여 로그를 효과적으로 기록하고 관리할 수 있다.
Spring Boot Start로 프로젝트를 생성하면 [spring-boot-starter-logging]이 포함되어 있어 별도의 의존성을 추가할 필요 없이 사용 가능하다.



1. 사용 방법

1-1)  src/resources/logback-srping.xml  파일 생성

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">

    <!-- 콘솔에 로그를 출력하는 설정 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 로그 파일에 로그를 출력하는 설정 -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/Users/home/logs/server.log</file> <!--로그 파일 기본 경로-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 로그 파일의 이름 형식 지정 -->
            <fileNamePattern>/Users/home/logs/server-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 하루 단위로 로그 파일 생성 -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 로그 보관 기간 지정 (30일) -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 루트 로거 설정 -->
    <root level="info">
        <appender-ref ref="console"/> <!-- 콘솔과 파일 둘다 출력 -->
        <appender-ref ref="file"/>
    </root>

    <!-- 특정 패키지 또는 클래스의 로깅 레벨 설정 -->
    <logger name="jex" level="debug"/>
    <logger name="com" level="debug"/>
</configuration>
  • logger : 패키지, 클래스에 따른 로깅 레벨을 별도로 설정할 수 있다.

 

1-2)  [Log Pattern  옵션]

로그를 출력하는 패턴 옵션
%d{yyyy-MM-dd HH:mm:ss} 년-월-일 시간의 형식 출력
[%thread] 이벤트를 발생시킨 스레드의 이름을 출력
%-5level 로그 이벤트의 로그 레벨 출력
(로그 레벨을 최소 5자리 폭으로 출력하되, 왼쪽 정렬. 예를 들어, INFO는 4자리이므로 그 뒤에 한 칸의 공백이 추가된다.)
%logger{36} 이벤트를 발생시킨 로거의 이름을 출력
(로거 이름을 최대 36자리로 제한. 만약 로거 이름이 36자보다 길다면, 앞부분이 잘리고 마지막 36자가 출력된다. 이는 긴 패키지 이름을 가지는 경우 유용함)
%msg 로그 이벤트의 메시지를 출력
%n 개행 문자

 

 

반응형

2. 파일 이름 or 위치를 변경할 경우

   application.yml  수정

2-1) 변경할 위치가 src/resources

logging:
  config: classpath:{파일경로}/{수정된 로그백 파일명}.xml

 

2-2) 서버 경로일 경우

logging:
  config: file:///{파일경로}/{수정된 로그백 파일명}.xml

 

 

 


3. 직접 경로 전달 받기

서버마다 환경이 다르기 때문에 실행 시 입력받을 수 있게 시스템 변수에 경로를 설정한다.

 logback-spring.xml 수정

...
<file>${LOG_DIR}/server.log</file>
...
<fileNamePattern>${LOG_DIR}/jex-%d{yyyy-MM-dd}.%i.log</fileNamePattern>

 

[프로젝트 실행]

java -DLOG_DIR={경로} -jar {프로젝트}.jar
  • LOG_DIR : 변수 이름을 설정해 내가 경로를 입력받아 내가 원하는 경로에 로그 파일을 생성한다.

 

 

 


4. Profile에 따른 서로 다른  로그 파일 생성

dev, prod 등 Profile에 따라 다른 로그 파일을 설정할 수 있다.

  application.yml  수정

# 디폴트 로그백 경로
logging:
  config: file:///Users/webcash/jex/logback-spring.xml

---
# poc 로그백 경로
spring:
  profiles: poc
logging:
  config: file:///Users/webcash/jex/logback-dev.xml

---
# prod 로그백 경로
spring:
  profiles: prod
logging:
  config: file:///Users/webcash/jex/logback-prod.xml
  • 물론 application 파일 자체를 Profile마다 다르게 설정할 수 있지만, 단순히 로그 파일만 다르게 할 경우 '---' 구분선을 통해 다르게 설정할 수 있다.

 

 

반응형