본문 바로가기

Programming!

Slf4j Log Marker를 이용한 로그 분리

좀 오래된 사항이기는 한데.. 여튼


O2O의 예약 관련 사항을 작업하던중 처음 단일 벤더에서, 멀티 벤더를 허용하게 된다. (익xx디아, 핏x즈 등등)


기존에는 file appender를 하나로 처리해서 예약 관련 로그를 file로 남겼는데, 벤더사가 늘어나다 보니 좀 분리할 필요가 생겼다.


해서 기존 logback-spring.xml에 Marker와 Filter를 적용하여 로그파일을 분리 시킴.


각 Filter에 대한 설명은 여기서 확인하면 된다.

https://logback.qos.ch/manual/filters.html


기존 logback-spring.xml


...

    <springProfile name="stage, prod, production">

    <logger name="com.tistory.eclipse4j" level="INFO" />

        <include resource="file-appender-vendor1.xml" />

        <include resource="file-appender-vendor2.xml" />

        <include resource="file-appender.xml" />


        <root level="INFO">

            <appender-ref ref="CONSOLE" />

            <appender-ref ref="FILE" />

            <appender-ref ref="vendor1-file" />

            <appender-ref ref="vendor2-file" />

        </root>

    </springProfile>

...


file-appender-expedia.xml

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

<included>

<appender name="expedia-file"

class="ch.qos.logback.core.rolling.RollingFileAppender">

<filter class="ch.qos.logback.core.filter.EvaluatorFilter"> 

<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator"> 

<marker>VENDOR1</marker> 

</evaluator> 

<OnMatch>ACCEPT</OnMatch>

            <OnMismatch>DENY</OnMismatch>

</filter> 

<encoder>

<pattern>${FILE_LOG_PATTERN}</pattern>

</encoder>

<file>logs/spring-expedia.log</file>

<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">

<fileNamePattern>VENDOR1_${LOG_FILE}.%i</fileNamePattern>

</rollingPolicy>

<triggeringPolicy

class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">

<MaxFileSize>100MB</MaxFileSize>

</triggeringPolicy>

</appender>

</included>



MyLogMarker.java

public class MyLogMarker {

    public static Marker VENDOR1 = MarkerFactory.getMarker("VENDOR1");

    public static Marker VENDOR2 = MarkerFactory.getMarker("VENDOR2");

}


Log남기기 

log.info(MyLogMarker.VENDOR1, "이 로그는 {} 로그입니다.", "Vendor1");