본문 바로가기
Java/Spring

[Logback] Logback 설정 기록. 프로필에 따라, 패키지에 따라 분리.

by 오늘의개발부 2020. 9. 3.
반응형

Spring Boot : 2.2.7.RELEASE
log4jdbc : 1.16

logback-spring.xml

src/main/resources/logback-spring.xml

클래스패스 경로 밑의 logback.xml를 읽는다.
logback.xml이라고 해놓으면 스프링이 로드되기 전에 읽기 때문에 스프링 관련 설정값을 가져올 수 없다.
스프링 안에서 관리하고 싶다면 반드시 파일 이름을 logback-spring.xml으로 한다.

 

 

간단하게 설정한다면 application.yml 안에서 설정할 수 있다.

 

spring:
  profiles: server
logging:
  pattern:
    console: "[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %M %logger{35} - %msg%n"
  level:
    org.springframework.web: error
    java.sql: error
    jdbc: off
    jdbc.sqlonly: off
    jdbc.sqltiming: error
    jdbc.audit: off
    jdbc.resultset: off
    jdbc.resultsettable: error
    jdbc.connection: error
spring:
  profiles: dev
logging:
  pattern:
    console: "[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %M %logger{35} - %msg%n"
  level:
    org.springframework.web: debug
    org.springframework.security: off
    java.sql: error
    jdbc: off
    jdbc.sqlonly: off
    jdbc.sqltiming: debug
    jdbc.audit: off
    jdbc.resultset: off
    jdbc.resultsettable: debug
    jdbc.connection: off

 

 

 

xml로 설정하려면 application.yml의 log 설정을 지워준다. 겹치면 설정이 섞이게 된다.

 

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <property name="PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %M %logger{35} - %msg%n" />    
    <springProperty name="ROOT_PATH" scope="context" source="config.gl_path_root" defaultValue="/"/>
    <!-- yml의 설정값을 가져올 수 있다. socpe는 context로 설정했고, yml 안의 config.gl_path_root 값을 가져왔다. 해당 키값이 없을 경우 디폴트로 /를 사용한다. 밑에서 사용할 땐 ${ROOT_PATH} 처럼 사용한다. -->


    <!-- 테스트 단계 콘솔로 로그를 남김 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${PATTERN}</pattern>
        </encoder>
    </appender>


    <!-- 기본 로그 file appender -->
    <appender name="basicFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${ROOT_PATH}/logs/server.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${ROOT_PATH}/logs/%d{yyyyMMdd}/server.%d{yyyyMMdd}.%i.log</fileNamePattern>
            <!-- 50MB를 초과하면 새로운 로그파일 생성. ex) server.200903.2.log -->
            <maxFileSize>50MB</maxFileSize>
            <!-- 60일이 지난 파일은 삭제한다-->
            <!-- <maxHistory>60</maxHistory> -->
        </rollingPolicy>
    </appender>


    <!-- 별도의 로그 파일을 분리하기 위한 file appender -->
    <appender name="scheduleFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${ROOT_PATH}/logs/schedule/photo_delete.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${ROOT_PATH}/logs/schedule/%d{yyyyMMdd}/photo_delete.%d{yyyyMMdd}.%i.log</fileNamePattern>
            <maxFileSize>50MB</maxFileSize>
            <!-- <maxHistory>60</maxHistory> -->
        </rollingPolicy>
    </appender>

    <!-- 프로필에 따라 다른 로거를 사용할 수 있다. -->
    <springProfile name="server">
        <logger name="com.xxx.xxx.scheduler.photo" level="info" additivity="false">
            <appender-ref ref="scheduleFileAppender"/>
        </logger>
         <logger name="org.springframework.boot" level="error"></logger>
        <logger name="org.springframework.web" level="error"></logger>
        <logger name="org.springframework.security" level="off"></logger>
        <logger name="java.sql" level="error"></logger>
        <logger name="jdbc" level="off"></logger>
        <logger name="jdbc.sqlonly" level="off"></logger>
        <logger name="jdbc.audit" level="off"></logger>
        <logger name="jdbc.resultset" level="off"></logger>
        <logger name="jdbc.sqltiming" level="error"></logger>
        <logger name="jdbc.resultsettable" level="error"></logger>
        <logger name="jdbc.connection" level="error"></logger>
        <root level="info">
           <appender-ref ref="basicFileAppender" />
        </root>
    </springProfile>


    <!-- 밑의 세 프로필에 대해서는 이 로거 설정을 사용한다.-->
    <springProfile name="dev | develop | test">    
        <root level="info">
           <appender-ref ref="consoleAppender" />
        </root>
        <logger name="org.springframework.boot" level="warn"></logger>
        <logger name="org.springframework.web" level="debug"></logger>
        <logger name="org.springframework.security" level="off"></logger>
        <logger name="java.sql" level="error"></logger>
        <logger name="jdbc" level="off"></logger>
        <logger name="jdbc.sqlonly" level="off"></logger>
        <logger name="jdbc.audit" level="off"></logger>
        <logger name="jdbc.resultset" level="off"></logger>
        <logger name="jdbc.sqltiming" level="debug"></logger>
        <logger name="jdbc.resultsettable" level="debug"></logger>
        <logger name="jdbc.connection" level="off"></logger>
    </springProfile>


</configuration>
반응형