공식 사이트 : http://logback.qos.ch/manual/configuration.html


xml 파일 위치

src/main/resources


1. logback 을 사용해야 하는 이유

 

- log4j에 비해 속도나 메모리 사용면에서 개선

- SLF4j 의 인터페이스를 직접 구현

- 설정파일의 Dynamic Reloading 지원

- 설정파일의 조건부 처리 기능

- 로그파일에 대한 자동압축, 자동 삭제 기능 제공

- 런타임에 설정한 값에 따라 로그를 분리하여 처리할 수 있는 SiftingAppender 제공

- groovy 언어로 설정파일 작성 가능

- FileAppender 사용 시 다수의 JVM이 동시에 하나의 파일에 로그를 남길 수 있는 prudent mode 지원

- 조건에 따른 로깅처리 여부를 결정할 수 있는 Filter 제공

- HTTP 디버깅 제공

 

2. 세팅

 

- maven

 

  <dependency>

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

  <artifactId>logback-classic</artifactId>

  <version>${logback.version}</version>

  <scope>runtime</scope>

</dependency>

 

<dependency>

  <groupId>org.slf4j</groupId>

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

  <version>${slf4j.version}</version>

  <scope>runtime</scope>

</dependency>

<dependency>

  <groupId>org.logback-extensions</groupId>

  <artifactId>logback-ext-spring</artifactId>

  <version>0.1.2</version>

</dependency>


처음과 2번째 설정만 있어도 logback 설정이 가능하나 logback.xml을 classpath내에 위치시킬 수 밖에 없고, web.xml 에 리스너로 등록할 수 없다. 리스너 설정을 하기 위해서 logback-ext-spring.jar 가 필요하다. Spring 4.0 에서는 기본 지원한다.

jcl-over-slf4j 라이브러리는 다른 라이브러리에서 발생한 로그내용을 SLF4J로 전가 시켜주는 기능을 한다.


- web.xml

 

<listener>

    <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>

</listener>

 

<context-param>

    <param-name>logbackConfigLocation</param-name>

    <param-value>classpath:config/logback.xml</param-value>

</context-param>

 

- logback 설정


logback.xml 의 내용은 공식사이트를 참고하면 된다. 여기서는 몇 가지 사항만 정리하였다.


* logback 에서 설정파일을 적용하는 순서는 다음과 같다. 


1. logback.groovy 파일을 먼저 찾는다.

2. 1이 없다면 logback-test.xml 을 찾는다.

3. 1,2가 없다면 logback.xml 을 찾는다.

4. 모두 없다면 기본 설정 전략을 따른다.


* logback 은 DTD 파일을 제공하지 않아서 IDE 의 자동완성을 사용할 수 없다. 이클립스같은 경우는 DTD schema 파일이 없다고 warning을 표시하니 설정에서 ignore 해주던가 <!DOCTYPE xml> 을 추가하여 warning 을 없애줄 수 있다.



logback.xml


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


<!-- 30초마다 설정 파일의 변경을 확인한다. 파일이 변경되면 다시 로딩한다 -->

<configuration scan="true" scanPeriod="30 seconds">

    

    <!-- setting -->


    <property resource="logback.properties"/>

    <!-- log packagename -->    

    <property name="LOG_PACKAGE_NAME" value="${log.config.packagename}" />

<!-- log file path -->    

    <property name="LOG_PATH" value="${log.config.path}" />

    <!-- log file name -->

    <property name="LOG_FILE_NAME" value="${log.config.filename}" />

    <!-- log days -->

    <property name="LOG_DAYS" value="${log.config.days}" />

    <!-- log filesize log-->

    <property name="LOG_FILESIZE_LOG" value="${log.config.filesizelog}" />

    <!-- log filesize zip-->

    <property name="LOG_FILESIZE_ZIP" value="${log.config.filesizezip}" />

    <!-- log filesize total-->

    <property name="LOG_TOTAL_FILESIZE" value="${log.config.totalfilesize}" />

    <!-- log min count -->

    <property name="LOG_FILE_MIN" value="${log.config.min}" />

    <!-- log max count -->

    <property name="LOG_FILE_MAX" value="${log.config.max}" />

    <!-- pattern -->

    <property name="LOG_PATTERN" value="%-5level %d{yyyy-MM-dd HH:mm:ss}[%thread] %logger[%method:%line] - %msg%n"/>

    

    <!-- setting -->

    

    <!-- console log-->

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

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">

            <pattern>${LOG_PATTERN}</pattern>

        </encoder>

    </appender>

    

    <!-- 압축 모드 -->

<if condition='property("log.config.savemode").equals("ZIP")'>

        <then>

     <!-- log file zip -->    

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

        <file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>

        

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

      <fileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}_%i.log.zip</fileNamePattern>

      <!-- file min count -->

      <minIndex>${LOG_FILE_MIN}</minIndex>

      <!-- file max count -->

      <maxIndex>${LOG_FILE_MAX}</maxIndex>

    </rollingPolicy>

     <!-- file size limit --> 

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

      <maxFileSize>${LOG_FILESIZE_ZIP}</maxFileSize>

    </triggeringPolicy>

        

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">

            <pattern>${LOG_PATTERN}</pattern>

        </encoder>

    </appender>

    

        </then>

        <else>

        <!-- 로그 모드 -->

<!-- log file save -->    

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

        <file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>

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

            <fileNamePattern>${LOG_PATH}/LOG_%d{yyyy-MM-dd}_${LOG_FILE_NAME}.log</fileNamePattern>

         <!-- file days limit -->

            <maxHistory>${LOG_DAYS}</maxHistory>

            <!-- file size -->

            <maxFileSize>${LOG_FILESIZE_LOG}</maxFileSize>

            <!-- total file size -->

            <totalSizeCap>${LOG_TOTAL_FILESIZE}</totalSizeCap>

        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">

            <pattern>${LOG_PATTERN}</pattern>

        </encoder>

    </appender>            

        </else>

    </if>

    

    <if condition='property("log.config.mode").equals("REAL")'>

        <then>

            <!-- real server -->

    <logger name="org.springframework" level="INFO" />

    <!-- <logger name="org.springframework.security" level="INFO" /> -->

    <!-- <logger name="org.hibernate" level="INFO"/> -->

    <logger name="org.hibernate.SQL" level="INFO"/>

    <logger name="org.hibernate.type" level="INFO"/>

    <logger name="${LOG_PACKAGE_NAME}"  level="INFO"/>

            

            <root level="INFO">

                <appender-ref ref="console"/>

                <appender-ref ref="FILE"/>

            </root>

        </then>

        <else>

            <!-- test server -->

         <logger name="org.springframework" level="DEBUG" />

         <!-- <logger name="org.springframework.security" level="DEBUG" /> -->

    <!-- <logger name="org.hibernate" level="DEBUG"/> -->

    <logger name="org.hibernate.SQL" level="DEBUG"/>

    <logger name="org.hibernate.type" level="TRACE"/>

    <!-- <logger name="org.hibernate.type.BasicTypeRegistry" level="WARN"/> -->

    <logger name="${LOG_PACKAGE_NAME}"  level="DEBUG"/>

    

            <root level="DEBUG">

                <appender-ref ref="console"/>

                <appender-ref ref="FILE"/>

            </root>

        </else>

    </if>

</configuration>


------------------------------------------------------------------------------------------------------------------------

logback.properties


#logback 설정


#로그파일  REAL실서버 TEST테스트 서버 모드

log.config.mode=REAL

#log.config.mode=TEST


#로그파일 저장 분기 ZIP이면 ZIP파일로 저장 LOG이면 LOG파일로 일자별 저장

#log.config.savemode=ZIP

log.config.savemode=LOG


#ZIP모드일 경우에만 사용

#로그파일 최소 개수

log.config.min=1

#로그파일 최대 개수

log.config.max=10

#로그파일 사이즈

log.config.filesizezip=100MB

#ZIP모드일 경우에만 사용


#LOG모드일 경우에만 사용

#로그파일 기간설정

log.config.days=10

#로그파일 사이즈

log.config.filesizelog=100MB

#로그파일 최대 최대 사이즈

log.config.totalfilesize=40GB

#LOG모드일 경우에만 사용


#공통 설정

#프로젝트 패키지 명

log.config.packagename=kr.co.test.www


#로그파일 경로

#log.config.path=d:\\log

log.config.path=/home/user/test/logs


#로그파일 이름

log.config.filename=test_log

[출처] logback.xml 설정|작성자 나틴

[출처] logback 세팅|작성자 문규님


+ Recent posts