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

    <property name="PATH_SEPARATOR" value="/"/>

	<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />

    <!-- 로그 파일이 저장될 경로 -->
    <property name="LOG_PATH" value=".${PATH_SEPARATOR}logs"/>
    
    
    <!-- 로그 파일 이름 -->
    <property name="LOG_FILE_NAME" value="trace"/>
    
    <!-- 로그 출력 패턴 -->
    <property name="LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %highlight([%.-1level]) %clr([%-40.40(%class{0}.%method)]){cyan} %msg%n"/>
    <property name="FILE_LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}][%.-1level][%-40.40(%class{0}.%method)] %msg%n"/>
    
    <!-- 로그 레벨 -->
    <!--
    	1) ERROR : 오류 메시지 표시 
        2) WARN  : 경고성 메시지 표시
        3) INFO  : 정보성 메시지 표시
        4) DEBUG : 디버깅하기 위한 메시지 표시
        5) TRACE :  Debug보다 훨씬 상세한 메시지 표시
    -->
    <property name="LOG_LEVEL" value="INFO"/>

    <!-- CONSOLE에 로그 출력 세팅 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">              
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${LOG_PATTERN}</pattern>
        </layout>
    </appender>

    <!-- File에 로그 출력 세팅 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    	
    	<!-- 로그파일은 Info부터 저장한다!! -->
    	<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- <level>INFO</level> -->
            <level>INFO</level>
        </filter>
        
        <!-- 파일 경로 설정 -->
        <file>${LOG_PATH}${PATH_SEPARATOR}${LOG_FILE_NAME}.log</file>

        <!-- 출력패턴 설정-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </layout>
        
        <!-- Rolling 정책 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
            <fileNamePattern>${LOG_PATH}${PATH_SEPARATOR}%d{yyyyMM,aux}${PATH_SEPARATOR}%d{yyyyMMdd}.log</fileNamePattern>            
            <!-- 로그파일 최대 보관주기, fileNamePattern 에 따라 일별, 월별, 년별-->
            <maxHistory>10</maxHistory>
            <!-- 아카이브 최대 용량 maxHistory 이후에 적용됨 -->
            <totalSizeCap>10GB</totalSizeCap>
            <!-- 시작시 정책 적용 여부 -->            
            <CleanHistoryOnStart>true</CleanHistoryOnStart>
        </rollingPolicy>
    </appender>
    
    <!-- 비동기 파일(FILE)
	  includeCallerData: fasle, 비동기 로깅에서도 Method Name 및 Line Number 등 위치 정보를 출력하게 해주는 옵션
	  queueSize: 기본값은 256, Log4j2와 동일하게 1024로 설정
	  neverBlock: false(기본값)면 로그 발생시 Queue에 넣을 공간이 없으면 빈 공간이 생길 때 까지 블락킹 상태로 기다리며, 로그를 유실하지 않는다.
	  discardingThreshold: Queue에 남은 용량이 {해당 설정값 n}%이하가 되면, WARN 미만 로그가 유실되기 시작한다.
	                - 기본 값은 20이며, Queue 남은 용량이 20%이하가 되면 로그 유실이 발생한다.
	                - 0으로 세팅하면 Queue에 쌓인 로그를 드랍하지 않는다.
	-->
	<appender name="FILE-ASYNC" class="ch.qos.logback.classic.AsyncAppender">
	    <appender-ref ref="FILE" />
	    <includeCallerData>false</includeCallerData>
	    <discardingThreshold>0</discardingThreshold>
	    <queueSize>1024</queueSize>
	    <neverBlock>true</neverBlock>
	</appender>

    <!-- 로그 전역 세팅 -->
    <!-- <root level="${LOG_LEVEL}">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
   </root> -->
    
    <logger name="kr.gmtc.gw" level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </logger>

    <!-- <logger name="kr.gmt.so" level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </logger> -->
    
    <!-- <logger name="kr.gmtc.comp.status" level="TRACE">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </logger> -->
    
</configuration>
