Programing/Springboot

Springboot logback 설정하기, 콘솔 및 파일저장

리커니 2018. 8. 17.
반응형

Springboot logback 설정하기, 콘솔 및 파일저장

 

[spec]

IDE : eclipse Mars 4.5.2

springboot version : 2.0.2

 

logback 설정파일 생성

 

src/main/resources 경로에 logback 패키지를 생성합니다.

그리고 그 내에 logback-spring.xml 파일을 생성합니다.

 

 

그리고 src/main/resource 경로에 위에서 생성한 logback 설정파일을

읽을 수 있도록 경로를 설정해 줍니다.

 

1
2
java# 로그 설정파일 위치 지정
logging.config=classpath:logback/logback-spring.xml
cs

 

이제 스프링부트 프로젝트 실행 시 logback 설정파일을 읽어 로그를 남길 수 있게 되었습니다.

그럼 로그를 어떻게 남길 것인지 설정을 해보도록 하죠.

참고로 로그 레벨은 TRACE > DEBUG > INFO > WARN > ERROR 입니다.

 

 

 

- logback-spring.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true">
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
    
    <property name="LOG_DIR" value="/eCall/logs" />
    <property name="SERVER_NAME" value="collection"/>
    <property name="LOG_PATH_NAME" value="${LOG_DIR}/${SERVER_NAME}" />
    <property name="FILE_NAME" value="collectionServer" /> 
 
    <!-- FILE Appender -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH_NAME}/${FILE_NAME}.log</file>
        <!-- 일자별 로그파일 저장 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH_NAME}/${FILE_NAME}_%d{yyyyMMdd}.log</fileNamePattern>
            <!-- 일자별 로그파일 저장 기간 설정 -->
            <maxHistory>30</maxHistory> 
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%F]%M\(%L\) : %m%n</pattern>
        </encoder>
    </appender>
 
    <appender name="AM_MSD_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH_NAME}/AM/${FILE_NAME}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH_NAME}/AM/${FILE_NAME}_%d{yyyyMMdd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} : %m%n</pattern>
        </encoder>
    </appender>
    
    <appender name="BM_MSD_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH_NAME}/BM/${FILE_NAME}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH_NAME}/BM/${FILE_NAME}_%d{yyyyMMdd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} : %m%n</pattern>
        </encoder>
    </appender>
    
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!-- [2018-08-17] [15:24:21.355] [log level] [logName]      [class.java line]       [message] -->
            <!--     날짜           시간       로그레벨    로거이름   로그인클래스.java 몇번째줄    로그메세지 -->
            <pattern>[%d{yyyy-MM-dd}] [%d{HH:mm:ss.SSS}] [%p] [%c{1}] [%F:%L [%m]%n</pattern>
        </layout>
    </appender>
     
    <!-- AM 수집 로그 파일 저장 -->
    <logger name="kr.co.neighbor21.ecall.geon.collection.server.resource" additivity="FALSE">
        <level value="INFO" />
        <appender-ref ref="AM_MSD_FILE" />
    </logger>
    
    <!-- BM 수집 로그 파일 저장 -->
    <logger name="kr.co.neighbor21.ecall.geon.collection.server" additivity="FALSE">
        <level value="INFO" />
        <appender-ref ref="BM_MSD_FILE" />
    </logger>
     
    <!-- 모든 로그 출력 (파일/콘솔) -->
    <root level="INFO">
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
    </root>
    
 
 
</configuration>
cs

 

3,4 번째 라인에서 로그를 남기는데 필요한 리소스를 include 합니다.

 

1
2
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
cs

 

6-9 번째 라인에서는 폴더 경로와 기본적인 파일명 설정을 해줍니다.

 

1
2
3
4
<property name="LOG_DIR" value="/eCall/logs" />
<property name="SERVER_NAME" value="collection"/>
<property name="LOG_PATH_NAME" value="${LOG_DIR}/${SERVER_NAME}" />
<property name="FILE_NAME" value="collectionServer" />
cs

 

appender 태그 부분은 로그를 남길 패턴과 정책을 설정해주는 부분입니다.

주석을 보시면 이해가 되실 꺼에요.

 

위와같이 appender를 나눠 놓은 이유는 특정 패키지 내의 로그를 따로 저장하기 위해서 입니다.

코드를 보시면 패턴과 저장경로가 다른 것을 확인하실 수 있습니다.

 

root 태그는 기본적으로 모든 로그를 어떤 레벨로 어떻게 처리할 것인가에 대한 설정입니다.

INFO레벨의 로그를 파일과 콘솔에 표출하겠다는 의미 입니다.

 

logger 태그는 해당 패키지 경로의 로그에 대한 설정입니다.

특정 패키지 내의 로그를 다르게 출력할때 사용합니다.

logger를 분리하면 root 설정에서는 제외 되니 이점 참고하세요.

반응형

댓글

💲 추천 글