ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Logback 설정 및 사용
    개발/Web 2019. 3. 20. 16:28

     유지보수 하던 프로젝트에서 매일 로그 기록을 일정 개수가 유지되도록 변경하게 되었다. 기존 프로젝트는 log4j를 사용하고 있었고, dailyRollingFileAppender의 날짜 포멧으로 매일 로그를 남기고 있었다. 하지만 개수를 유지하는것은 RollingFileAppender의 maxbackupindex 설정 영역이었다.

     log4j 1.2버전을 찾아보고, 돌다돌아 커스터마이징 한 dailyRollingFileAppender를 프로젝트에 추가해 적용시켜보았지만 잘 되지않았다.

     그리고 알게 된 것이 logback이다.

     logback은 log4j를 만든 개발자가 더 보완해서 만든거라는 설명글을 보았다.

    자세한 정보는 

    https://logback.qos.ch/documentation.html

    공식 사이트 메뉴얼을 참조하도록 하자.

     logback을 이용하려면 slf4j를 떼어낼 수 없다. slf4j는 Logging Facade라는데 여러 logging 처리들을 연결하는 interface라고 이해하였다. 



    logback의 특징은

    1.lof4j의 아키텍처기반으로 재작성되었지만 성능은 약 10배정도 빠르게 개선되었고 메모리 점유도 적게 사용한다.

    2.반복과정을 통한 높은 퀄리티

    3.logack 파일서버가 일시적으로 장애가 발생할 경우 서버 중지 없이 이전 시점으로 복구지원

    ...

    여러개가 나열되나 내가 원한

    파일 패턴, 개수, 용량등을 설정할 수 있다.



    사용방법으로는

    pom.xml에 


    <!-- Spring -->

    <dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-context</artifactId>

    <version>${org.springframework-version}</version>

    </dependency>

    <dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-webmvc</artifactId>

    <version>${org.springframework-version}</version>

    <exclusions>

    <!-- Exclude Commons Logging in favor of SLF4j-->

    <exclusion>

    <groupId>commons-logging</groupId>

    <artifactId>commons-logging</artifactId>

    </exclusion>

    </exclusions> 

    </dependency>



    <dependency>

    <groupId>org.slf4j</groupId>

    <artifactId>slf4j-api</artifactId>

    <version>1.7.12</version>

    </dependency>

    <dependency>

    <groupId>org.slf4j</groupId>

    <artifactId>jcl-over-slf4j</artifactId>

    <version>1.7.12</version>

    </dependency>

    <dependency>

        <groupId>ch.qos.logback</groupId>

    <artifactId>logback-core</artifactId>

    <version>1.1.2</version>

    </dependency>

    <dependency>

        <groupId>ch.qos.logback</groupId>

        <artifactId>logback-classic</artifactId>

        <version>1.1.2</version>

    </dependency>



    더 간단하고 심플한 게 있지만 현재 작업하는 프로젝트에서는spring webmvc아래 commons-logging과  slf4j, logback을 추가한다.


    그리고 spring에서 logback의 기본 위치는 src/main/resources

    아래 logback.xml을 두면된다.


    logback.xml 설정은



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

    <configuration>

        <include resource="org/springframework/boot/logging/logback/defaults.xml" />

        <include resource="org/springframework/boot/logging/logback/console-appender.xml" />    


        <!-- 변수 지정 -->

        <property name="LOG_DIR" value="/logs" />

        <property name="LOG_PATH_NAME" value="${LOG_DIR}/data.log" />


        <!-- FILE Appender -->

        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

            <file>${LOG_PATH_NAME}</file>

            <!-- 일자별로 로그파일 적용하기 -->

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

                <fileNamePattern>

    ${LOG_PATH_NAME}.%d{yyyy-MM-dd.log

    </fileNamePattern>


      <!-- 만약 시까지 표현하려면 yyyy-MM-dd_HH /

     분까지 하려면 yyyy-MM-dd_HH-mm로 하면된다 -->

     


                <maxHistory>60</maxHistory> <!-- 일자별 백업파일의 보관기간 -->

            </rollingPolicy>

            <encoder>

                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%F]%M\(%L\) : %m%n</pattern>

            </encoder>

        </appender>


        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

          <layout class="ch.qos.logback.classic.PatternLayout">

            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%F]%M\(%L\) : %m%n</pattern>

          </layout>

        </appender>


        <!-- TRACE > DEBUG > INFO > WARN > ERROR, 대소문자 구분 안함 -->

        <!-- profile 을 읽어서 appender 을 설정할수 있다.(phase별 파일을 안만들어도 되는 좋은 기능) -->

        <springProfile name="local">

          <root level="DEBUG">

            <appender-ref ref="FILE" />

            <appender-ref ref="STDOUT" />

          </root>

        </springProfile>

        <springProfile name="real">

          <root level="INFO">

            <appender-ref ref="FILE" />

            <appender-ref ref="STDOUT" />

          </root>

        </springProfile>

    </configuration>



    java에서로깅은


    import org.slf4j.Logger;

    import org.slf4j.LoggerFactory;


     static final Logger logger = LoggerFactory.getLogger(className.class);


    를 추가하여 사용하면 된다.



    댓글

Designed by Tistory.