<?xml version="1.0" encoding="UTF-8"?>
<configuration>

	<!-- properties -->
	<property name="SERVICE_NAME" value="mView" />
	<property name="CHAR_SET" value="UTF-8" />
	
	<!-- Log info properties -->
	<property name="LOG_DIR_NAME" value="${SERVICE_NAME}_LOG" />
	<property name="LOG_PATH" value="C:/PACSDATA/LOG/${LOG_DIR_NAME}" />
	<property name="LOG_LEVEL" value="TRACE" />
	<property name="LOG_PATTERN" value="%.-1level %d{HH:mm:ss.SSS} [%.-10t] %c{1}.%method\\(%line\\) %msg%n" />
	<property name="CONSOLE_LOG_PATTERN" value="%.-1level %d{HH:mm:ss.SSS} [%.-10t] %c{1}.%method\\(%line\\) %.-500msg%n" />
	
	<!-- File name properties -->
	<property name="FILE_NAME" value="${LOG_PATH}/${SERVICE_NAME}" />
	<property name="LOG_FILE_NAME" value="${FILE_NAME}.log" />
	<property name="DEBUG_FILE_NAME" value="${FILE_NAME}_debug.log" />
	<property name="INFO_FILE_NAME" value="${FILE_NAME}_info.log" />
	<property name="ERROR_FILE_NAME" value="${FILE_NAME}_error.log" />
	
	<!-- File pattern properties -->
	<property name="FILE_PATTERN" value="${FILE_NAME}_%d{yyyy-MM-dd}" />
	<property name="LOG_FILE_PATTERN" value="${FILE_PATTERN}(%i).log" />
	<property name="DEBUG_FILE_PATTERN" value="${FILE_PATTERN}_debug(%i).log" />
	<property name="INFO_FILE_PATTERN" value="${FILE_PATTERN}_info(%i).log" />
	<property name="ERROR_FILE_PATTERN" value="${FILE_PATTERN}_error(%i).log" />
	
	<!-- Rolling properties -->
	<property name="MAX_HISTORY" value="30" />
	<property name="MAX_FILE_SIZE" value="300MB" />
	<property name="TOTAL_SIZE_CAP" value="1GB" />
	
	<!-- Console appender -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
			<charset>${CHAR_SET}</charset>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>${LOG_LEVEL}</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>ACCEPT</onMismatch>
		</filter>
    </appender>
	
	<!-- Custom Console appender -->
	<appender name="logoutput" class="mdcpk.log.MyOutputStreamAppender">
        <encoder>
			<charset>${CHAR_SET}</charset>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>${LOG_LEVEL}</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>ACCEPT</onMismatch>
		</filter>
    </appender>
    
	<!-- File log appender -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_FILE_NAME}</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${LOG_FILE_PATTERN}</fileNamePattern>
			<maxHistory>${MAX_HISTORY}</maxHistory>
			<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
			<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
			<cleanHistoryOnStart>true</cleanHistoryOnStart>
		</rollingPolicy>
        <encoder>
			<charset>${CHAR_SET}</charset>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>${LOG_LEVEL}</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>ACCEPT</onMismatch> <!-- 다른 수준의 레벨은 기록하지 않는다.(상위 레벨도 기록 안함), 상위 수준의 레벨에 대한 기록을 원하면 ACCEPT 로 하면 기록된다. -->
		</filter>
    </appender>
	
	<?ignore
    <!-- Debug log appender -->
    <appender name="debugLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${DEBUG_FILE_NAME}</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${DEBUG_FILE_PATTERN}</fileNamePattern>
			<maxHistory>${MAX_HISTORY}</maxHistory>
			<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
			<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
			<cleanHistoryOnStart>true</cleanHistoryOnStart>
		</rollingPolicy>
        <encoder>
			<charset>${CHAR_SET}</charset>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>DEBUG</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch> <!-- 다른 수준의 레벨은 기록하지 않는다.(상위 레벨도 기록 안함), 상위 수준의 레벨에 대한 기록을 원하면 ACCEPT 로 하면 기록된다. -->
		</filter>
    </appender>
    
    <!-- Info log appender -->
    <appender name="infoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${INFO_FILE_NAME}</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${INFO_FILE_PATTERN}</fileNamePattern>
			<maxHistory>${MAX_HISTORY}</maxHistory>
			<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
			<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
			<cleanHistoryOnStart>true</cleanHistoryOnStart>
		</rollingPolicy>
        <encoder>
			<charset>${CHAR_SET}</charset>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
    </appender>
    
    <!-- Error log appender -->
    <appender name="errorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${ERROR_FILE_NAME}</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${ERROR_FILE_PATTERN}</fileNamePattern>
			<maxHistory>${MAX_HISTORY}</maxHistory>
			<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
			<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
			<cleanHistoryOnStart>true</cleanHistoryOnStart>
		</rollingPolicy>
        <encoder>
			<charset>${CHAR_SET}</charset>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
    </appender>
	?>
    
    <root level="TRACE">
        <appender-ref ref="console" />
		<appender-ref ref="logoutput" />
		<appender-ref ref="file" />
        <!-- <appender-ref ref="errorLog" /> -->
        <!-- <appender-ref ref="infoLog" /> -->
        <!-- <appender-ref ref="debugLog" /> -->
 	</root>
    <logger name="org.mongodb.driver.connection" level="INFO"></logger></configuration>