LANGUAGE/Java & Groovy 2018. 2. 1. 01:04

Java

Logback (로그백)

Example) EvaluatorFilter를 이용해서 특정 로그에 색을 다르게 출력하기

어떻게 로그를 구분지을 것인지를 정하고, 출력되는 로그의 문장 또는 특정 값들의 특징을 파악하고 분석해야한다.

  • 나의 경우에는 다음 4가지의 경우로 구분지었다.

1. 일반 로그

2. 본 프로젝트에서 출력하는 로그 (com.test로 시작)

3. SQL을 출력할때 로그 (com.test.sql로 시작 / package에 "DAO"가 포함 / 로그메세지가"==> Preparing"으로 시작)

4. Batch작업시 로그 (com.test.batch로 시작 )

작업시작!

구분을 스스로 정의하였다면 

그 다음 태그에 Java 코드를 이용하여 Boolean값을 반환해주도록 한다. 

어떤 변수가 제공되는지는 사이트를 참고하자.  https://logback.qos.ch/manual/filters.html#evalutatorFilter

, 태그를 이용하여 반환된 Boolean값에 따라 해당 Appender를 적용할 것인지 말것인지 정한다. 

사실 아래 예제부터 보며 파악하는 것이 가장 이해가 빠를 것이다.

<!-- Console Log -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <charset>UTF-8</charset>
        <pattern>[%d] [%highlight(%-5level)] %logger[%cyan(%method:%line)] - %msg %n</pattern>
    </encoder>
</appender>


<!-- [all] Develop Console Log -->
<appender name="CONSOLE-DEVELOP" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
            <expression>
                if ( logger.startsWith("com.test") || logger.startsWith("com.test.batch") ){
                    return false;
                }
                return true;
            </expression>
        </evaluator>
        <OnMismatch>DENY</OnMismatch>
        <OnMatch>ACCEPT</OnMatch>
    </filter>
    <encoder>
        <charset>UTF-8</charset>
        <pattern>[%d] [%highlight(%-5level)] %logger[%cyan(%method:%line)] - %msg %n</pattern>
    </encoder>
</appender>


<!-- [com.test.*] Develop Console Log -->
<appender name="CONSOLE-DEVELOP-TEST" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
            <expression>
                if ( logger.startsWith("com.test") &amp;&amp; !logger.startsWith("com.test.batch") &amp;&amp; (!logger.toUpperCase().contains("DAO") || !message.startsWith("==>  Preparing")) ){
                    return true;
                }
                return false;
            </expression>
        </evaluator>
        <OnMismatch>DENY</OnMismatch>
        <OnMatch>ACCEPT</OnMatch>
    </filter>
    <encoder>
        <charset>UTF-8</charset>
        <pattern>[%d] [%highlight(%-5level)] %yellow(%logger)[%cyan(%method:%line)] - %yellow(%msg) %n</pattern>
    </encoder>
</appender>


<!-- [com.test.*] Develop Console Log(SQL) -->
<appender name="CONSOLE-DEVELOP-TEST-SQL" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
            <expression>
                if ( logger.startsWith("com.test") &amp;&amp; !logger.startsWith("com.test.batch") &amp;&amp; (logger.toUpperCase().contains("DAO") &amp;&amp; message.startsWith("==>  Preparing")) ){
                    return true;
                }
                return false;
            </expression>
        </evaluator>
        <OnMismatch>DENY</OnMismatch>
        <OnMatch>ACCEPT</OnMatch>
    </filter>
    <encoder>
        <charset>UTF-8</charset>
        <pattern>[%d] [%highlight(%-5level)] %boldMagenta(%logger)[%cyan(%method:%line)] - %boldMagenta(%msg) %n</pattern>
    </encoder>
</appender>


<!-- [com.test.batch*] Develop Console Log(SQL) -->
<appender name="CONSOLE-DEVELOP-TEST-BATCH" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
            <expression>
                if ( logger.startsWith("com.test.batch") ){
                    return true;
                }
                return false;
            </expression>
        </evaluator>
        <OnMismatch>DENY</OnMismatch>
        <OnMatch>ACCEPT</OnMatch>
    </filter>
    <encoder>
        <charset>UTF-8</charset>
        <pattern>[%d] [%highlight(%-5level)] %boldBlue(%logger)[%boldBlue(%method:%line)] - %boldBlue(%msg) %n</pattern>
    </encoder>
</appender>


<root leve="DEBUG" />
    <!--<appender-ref ref="CONSOLE" />-->

    <!-- /////////////// -->
    <!-- /// Develop /// -->
    <!-- /////////////// -->
    <appender-ref ref="CONSOLE-DEVELOP" />
    <appender-ref ref="CONSOLE-DEVELOP-TEST" />
    <appender-ref ref="CONSOLE-DEVELOP-TEST-SQL" />
    <appender-ref ref="CONSOLE-DEVELOP-TEST-BATCH" />
</root>

참고