공식 사이트 : 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 세팅|작성자 문규님