Logback.xml 로깅 프레임워크란 무엇입니까? ConsoleAppender, FileAppender 및 RollingFileAppender 예제
게시 됨: 2019-02-13
Logback Logging Framework
를 알고 계십니까? 글쎄, 대부분의 사람들은 주로 log4j and slf4j
를 프로젝트에 사용합니다. 지난 6개월부터 저는 Logback.xml
로깅 프레임워크를 사용해 왔으며 프로덕션 애플리케이션에서 상당한 성능 향상을 보았습니다.
이 튜토리얼에서는 Logback 로깅 프레임워크의 실제 예를 살펴보겠습니다.
logback.qos.ch는 무엇입니까?
Logback은 일종의 Log4j의 새 버전입니다. log4j 개발이 중단된 곳에서 개발되었습니다.

관심이 있는 경우 Crunchify에서 Log4j에 대한 여러 자습서를 게시했습니다.
- 자신의 log4j 로깅 수준을 설정하는 방법은 무엇입니까?
- log4j.properties를 구성하는 방법은 무엇입니까?
여기에서는 Enterprise Java 프로젝트용 Logback Logging Framework를 설정하는 방법에 대한 모든 세부 단계를 살펴보겠습니다. 아래에 새 파일을 만들 것입니다.
- 리소스 폴더
logback.xml
파일 아래 - 자바 클래스
CrunchifyLogbackLogging.java
시작하자
Step-1 logback.xml 파일 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<? xml version = "1.0" encoding = "UTF-8" ?> < configuration > < appender name = "CRUNCHIFYOUT" class = "ch.qos.logback.core.ConsoleAppender" > < layout class = "ch.qos.logback.classic.PatternLayout" > < Pattern > % d { HH : mm : ss . SSS } [ % thread ] % - 5level % logger { 36 } % X { sourceThread } - % msg % n < / Pattern > < / layout > < / appender > < appender name = "CRUNCHIFYFILE" class = "ch.qos.logback.core.FileAppender" > < file > / Users / ashah / Documents / crunchify . log < / file > < encoder > < pattern > % date % level [ % thread ] % logger { 10 } [ % file : % line ] % msg % n < / pattern > < / encoder > < / appender > < appender name = "CRUNCHIFYROLLING" class = "ch.qos.logback.core.rolling.RollingFileAppender" > < file > / Users / ashah / Documents / crunchify - rolling . log < / file > < encoder class = "ch.qos.logback.classic.encoder.PatternLayoutEncoder" > < Pattern > % d { yyyy - MM - dd HH : mm : ss } [ % thread ] % level % logger { 35 } - % msg % n < / Pattern > < / encoder > < rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" > < ! -- We are rolling over daily -- > < fileNamePattern > crunchify . log . timeroll . % d { yyyy - MM - dd } . log < / fileNamePattern > < ! -- keep 10 days ' worth of history capped at 1GB total size -- > < maxHistory > 10 < / maxHistory > < totalSizeCap > 1GB < / totalSizeCap > < / rollingPolicy > < / appender > < ! -- default is DEBUG -- > < root level = "DEBUG" > < appender - ref ref = "CRUNCHIFYOUT" / > < appender - ref ref = "CRUNCHIFYFILE" / > < appender - ref ref = "CRUNCHIFYROLLING" / > < / root > < / configuration > |
먼저 logback.xml 파일을 이해합시다.
- 파일 맨 아래에
root
요소 아래에 3개의 추가 참조가appender-ref
가 있는 것을 볼 수 있습니다. - 로그 수준을
DEBUG
로 사용하고 있습니다. 즉, DEBUG 레벨 이상으로 모든 것을 인쇄하십시오.
CRUNCHIFYOUT
어펜더는 ch.qos.logback.core 클래스입니다. ConsoleAppender
. 즉, 모든 로깅 데이터가 Eclipse 콘솔에 인쇄됩니다.
CRUNCHIFYFILE
은 ch.qos.logback.core 유형입니다. FileAppender
. 즉, 모든 로깅 데이터도 localfile에 인쇄됩니다. 우리의 경우 /Users/ ashah /Documents/ crunchify.log
입니다.
CRUNCHIFYROLLING
은 ch.qos.logback.core.rolling 유형 입니다. RollingFileAppender
. RollingPolicy에서 볼 수 있듯이 우리는 매일 파일을 롤링하고 최대 10개의 파일을 유지합니다. 또한 이 예에서는 총 파일 크기 용량 제한이 1 GB
입니다. /Users/ ashah /Documents/ crunchify -rolling.log
-rolling.log 위치에 새 파일이 생성됩니다 .
Step-2 테스트를 위한 자바 프로그램을 작성합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
package crunchify . com . tutorial ; import org . slf4j . Logger ; import org . slf4j . LoggerFactory ; /** * @author Crunchify.com * Program: Very simple Logback.xml test class with ConsoleAppender, FileAppender and RollingFileAppender * Version: 1.0.0 * */ public class CrunchifyLogbackLogging { private final Logger crunchifyLogging = LoggerFactory . getLogger ( CrunchifyLogbackLogging . class ) ; public static void main ( String [ ] args ) { CrunchifyLogbackLogging crunchifyLogger = new CrunchifyLogbackLogging ( ) ; crunchifyLogger . getStartedwithLogBackTesting ( ) ; } private void getStartedwithLogBackTesting ( ) { for ( int i = 1 ; i < = 10 ; i ++ ) { crunchifyLogging . debug ( "......This is test by Crunchify on Logback DEBUG...... " ) ; crunchifyLogging . info ( "......This is test by Crunchify on Logback INFO......" ) ; crunchifyLogging . error ( "......This is test by Crunchify on Logback ERROR......" ) ; crunchifyLogging . warn ( "......This is test by Crunchify on Logback WARN......" ) ; } } } |
이것은 오류, 정보, 디버그를 사용하고 4가지 로깅 수준을 모두 경고하는 매우 간단한 Java 테스트 클래스입니다. 우리는 10번 반복합니다.
3단계
위의 프로그램을 실행하면 위에서 언급한 것처럼 logback 프레임워크가 두 개의 새 파일을 생성합니다.

Eclipse 콘솔을 확인하십시오. 아래 로그가 표시됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
15 : 36 : 12 , 978 | - INFO in ch . qos . logback . classic . LoggerContext [ default ] - Could NOT find resource [ logback - test . xml ] 15 : 36 : 12 , 978 | - INFO in ch . qos . logback . classic . LoggerContext [ default ] - Could NOT find resource [ logback . groovy ] 15 : 36 : 12 , 978 | - INFO in ch . qos . logback . classic . LoggerContext [ default ] - Found resource [ logback . xml ] at [ file : / Users / ashah / Documents / site / Bitbucket / crunchifytutorials / target / classes / logback . xml ] 15 : 36 : 13 , 077 | - INFO in ch . qos . logback . classic . joran . action . ConfigurationAction - debug attribute not set 15 : 36 : 13 , 077 | - INFO in ch . qos . logback . core . joran . action . AppenderAction - About to instantiate appender of type [ ch . qos . logback . core . ConsoleAppender ] 15 : 36 : 13 , 087 | - INFO in ch . qos . logback . core . joran . action . AppenderAction - Naming appender as [ CRUNCHIFYOUT ] 15 : 36 : 13 , 143 | - WARN in ch . qos . logback . core . ConsoleAppender [ CRUNCHIFYOUT ] - This appender no longer admits a layout as a sub - component , set an encoder instead . 15 : 36 : 13 , 143 | - WARN in ch . qos . logback . core . ConsoleAppender [ CRUNCHIFYOUT ] - To ensure compatibility , wrapping your layout in LayoutWrappingEncoder . 15 : 36 : 13 , 143 | - WARN in ch . qos . logback . core . ConsoleAppender [ CRUNCHIFYOUT ] - See also http : //logback.qos.ch/codes.html#layoutInsteadOfEncoder for details 15 : 36 : 13 , 144 | - INFO in ch . qos . logback . core . joran . action . AppenderAction - About to instantiate appender of type [ ch . qos . logback . core . FileAppender ] 15 : 36 : 13 , 147 | - INFO in ch . qos . logback . core . joran . action . AppenderAction - Naming appender as [ CRUNCHIFYFILE ] 15 : 36 : 13 , 147 | - INFO in ch . qos . logback . core . joran . action . NestedComplexPropertyIA - Assuming default type [ ch . qos . logback . classic . encoder . PatternLayoutEncoder ] for [ encoder ] property 15 : 36 : 13 , 148 | - INFO in ch . qos . logback . core . FileAppender [ CRUNCHIFYFILE ] - File property is set to [ / Users / ashah / Documents / crunchify . log ] 15 : 36 : 13 , 151 | - INFO in ch . qos . logback . core . joran . action . AppenderAction - About to instantiate appender of type [ ch . qos . logback . core . rolling . RollingFileAppender ] 15 : 36 : 13 , 152 | - INFO in ch . qos . logback . core . joran . action . AppenderAction - Naming appender as [ CRUNCHIFYROLLING ] 15 : 36 : 13 , 159 | - INFO in c . q . l . core . rolling . TimeBasedRollingPolicy @ 2096171631 - setting totalSizeCap to 1 GB 15 : 36 : 13 , 161 | - INFO in c . q . l . core . rolling . TimeBasedRollingPolicy @ 2096171631 - No compression will be used 15 : 36 : 13 , 163 | - INFO in c . q . l . core . rolling . TimeBasedRollingPolicy @ 2096171631 - Will use the pattern crunchify . log . timeroll . % d { yyyy - MM - dd } . log for the active file 15 : 36 : 13 , 166 | - INFO in c . q . l . core . rolling . DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'crunchify.log.timeroll.%d{yyyy-MM-dd}.log' . 15 : 36 : 13 , 166 | - INFO in c . q . l . core . rolling . DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll - over at midnight . 15 : 36 : 13 , 171 | - INFO in c . q . l . core . rolling . DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Thu Sep 07 11 : 42 : 27 CDT 2017 15 : 36 : 13 , 173 | - INFO in ch . qos . logback . core . rolling . RollingFileAppender [ CRUNCHIFYROLLING ] - Active log file name : / Users / ashah / Documents / crunchify - rolling . log 15 : 36 : 13 , 173 | - INFO in ch . qos . logback . core . rolling . RollingFileAppender [ CRUNCHIFYROLLING ] - File property is set to [ / Users / ashah / Documents / crunchify - rolling . log ] 15 : 36 : 13 , 173 | - INFO in ch . qos . logback . classic . joran . action . RootLoggerAction - Setting level of ROOT logger to DEBUG 15 : 36 : 13 , 174 | - INFO in ch . qos . logback . core . joran . action . AppenderRefAction - Attaching appender named [ CRUNCHIFYOUT ] to Logger [ ROOT ] 15 : 36 : 13 , 174 | - INFO in ch . qos . logback . core . joran . action . AppenderRefAction - Attaching appender named [ CRUNCHIFYFILE ] to Logger [ ROOT ] 15 : 36 : 13 , 174 | - INFO in ch . qos . logback . core . joran . action . AppenderRefAction - Attaching appender named [ CRUNCHIFYROLLING ] to Logger [ ROOT ] 15 : 36 : 13 , 174 | - INFO in ch . qos . logback . classic . joran . action . ConfigurationAction - End of configuration . 15 : 36 : 13 , 175 | - INFO in ch . qos . logback . classic . joran . JoranConfigurator @ 7e0babb1 - Registering current configuration as safe fallback point 15 : 36 : 13.181 [ main ] DEBUG c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback DEBUG . . . . . . 15 : 36 : 13.186 [ main ] INFO c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback INFO . . . . . . 15 : 36 : 13.187 [ main ] ERROR c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback ERROR . . . . . . 15 : 36 : 13.187 [ main ] WARN c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback WARN . . . . . . 15 : 36 : 13.188 [ main ] DEBUG c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback DEBUG . . . . . . 15 : 36 : 13.188 [ main ] INFO c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback INFO . . . . . . 15 : 36 : 13.188 [ main ] ERROR c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback ERROR . . . . . . 15 : 36 : 13.188 [ main ] WARN c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback WARN . . . . . . |
그 외에도 로컬 파일 로그를 확인할 수 있으며 logback.xml
파일은 모든 새 파일을 생성하고 그 안에 로그를 인쇄하기 시작했습니다.


즐감하세요. logback.xml과 3개의 appender(ConsoleAppender, FileAppender, RollingFileAppender)를 모두 올바르게 설정했습니다.
보너스 포인트:
FixedWindowRollingPolicy
로 RollingFileAppender
를 설정하시겠습니까? 아래의 appender를 잘 사용하고 logback.xml 파일에 넣으면 모든 것이 좋습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
< appender name = "CRUNCHIFYROLLINGFIXEDWINDOW" class = "ch.qos.logback.core.rolling.RollingFileAppender" > < file > / Users / ashah / Documents / crunchify - rolling - fixwindows . log < / file > < encoder class = "ch.qos.logback.classic.encoder.PatternLayoutEncoder" > < pattern > % date % level [ % thread ] % logger { 10 } [ % file : % line ] % msg % n < / pattern > < / encoder > < rollingPolicy class = "ch.qos.logback.core.rolling.FixedWindowRollingPolicy" > < FileNamePattern > crunchify . log . fixedsize . { yyyy - MM - dd } % i . log < / FileNamePattern > < MinIndex > 1 < / MinIndex > < MaxIndex > 15 < / MaxIndex > < / rollingPolicy > < triggeringPolicy class = "ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy" > < MaxFileSize > 20MB < / MaxFileSize > < / triggeringPolicy > < / appender > |
또한 루트 요소 아래에 appender-ref를 추가하기만 하면 됩니다.
1 |
< appender - ref ref = "CRUNCHIFYROLLINGFIXEDWINDOW" / > |