CORE
HOME > JAVA > J2SE > CORE
2019.05.29 / 01:05

JAVA¿¡¼­ LogBackÀ» ÀÌ¿ëÇÑ ·Î±ë(logging) – »ç¿ë¹ý

±èÁ¾Çõ
Ãßõ ¼ö 305

»ç¿ë¹ýÀ» ¼³¸íÇϱâ¾Õ¼­ ¸ÕÀú LogBack°ú ÇÔ²² ¾µ SLF4J ¿¡ ´ëÇØ °£·«È÷ ¼³¸íÇÏ°Ú½À´Ï´Ù.
SLF4J¶õ, Simple Logging Facade for JavaÀÇ ¾àÀڷΠLog4JÀÇ °³¹ßÀÚ Ceki Gülcü°¡ LogBack°ú ÇÔ²² °³¹ßÇÑ Logging Facade Áï, ·Î±ë¿¡ ´ëÇÑ ÀÎÅÍÆäÀ̽º ¸ðÀ½À̶ó°í º¼ ¼ö ÀÖ½À´Ï´Ù. LogBackÀÌ ¹Ù·Î SLF4JÀÇ Native ±¸ÇöüÀ̸ç SLF4J¸¦ »ç¿ëÇÏ¿© ·Î±ë 󸮸¦ ÇÏ¸é ½ÇÁ¦ ·Î±×´Â LogBack¿¡¼­ Ãâ·ÂÇÏ°Ô µË´Ï´Ù.
SLF4J¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº ¾Æ·¡ÀÇ ¸µÅ©¿¡¼­ È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
SLF4J ·Î±ë ó¸®


Áö±ÝºÎÅÍ LogBackÀÇ »ç¿ë¹æ¹ý¿¡ ´ëÇØ ¼³¸íÇÏ°Ú½À´Ï´Ù.

1. Áغñ¹°

¿ì¼± ÇʼöÀûÀ¸·Î ÃÑ 3°³ÀÇ ¸ðµâÀÌ ÇÊ¿äÇÕ´Ï´Ù.
logback-core.jar
logback-classic.jar
slf4j-api.jar
¼¼ ÆÄÀÏÀº ¾Æ·¡ÀÇ ¸µÅ©¿¡¼­ ´Ù¿î¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù.
http://logback.qos.ch/download.html
http://www.slf4j.org/download.html

2. ±âº» ÅÛÇø´

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package src;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public class Main {
 
    private static Logger logger = LoggerFactory.getLogger(Main.class);
 
    public static void main(String[] args) {
        logger.trace("trace");
        logger.debug("debug");
        logger.info("info");
        logger.warn("warn");
        logger.error("error");
    }
}

1) ¸ÕÀú org.slf4j ÆÐÅ°ÁöÀÇ Logger, LoggerFactory Ŭ·¡½º¸¦ import ÇÕ´Ï´Ù.
2) LoggerFactory Ŭ·¡½ºÀÇ getLogger ¸Þ¼Òµå¸¦ ÅëÇØ Logger °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù.
3) Logger °´Ã¼ÀÇ ·Î±× ·¹º§¸íÀÇ ¸Þ¼Òµå¸¦ ÅëÇØ ¿øÇÏ´Â ·¹º§ÀÇ ·Î±×¸¦ Ãâ·ÂÇϵµ·Ï ÇÕ´Ï´Ù.

Ãâ·Â °á°ú :
%eb%a1%9c%ea%b7%b8-%ec%b6%9c%eb%a0%a5%ea%b2%b0%ea%b3%bc
ÀÌ´Â ¼³Á¤¿¡ ¾Æ¹« Àû¿ëÀ» ÇÏÁö ¾ÊÀº »óÅ¿¡¼­ÀÇ Ãâ·Â°á°ú ÀÔ´Ï´Ù. À§¿Í °°ÀÌ [ ½Ã°£ / È£Ãâ ¸Þ¼Òµå / ·Î±× ·¹º§ / Ŭ·¡½º¸í / ·Î±× ³»¿ë ] ÀÇ ÆÐÅÏÀ¸·Î ÀÌ·ç¾îÁø ·Î±× ¸Þ½ÃÁö°¡ Äֿܼ¡ Ãâ·Â µÈ °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
±×·±µ¥ ¿©±â¼­, ºÐ¸íÈ÷ Äڵ忡´Â logger.trace("trace");°¡ Àִµ¥ °á°ú¿¡´Â TRACE ·¹º§ÀÇ ·Î±×°¡ Ãâ·ÂµÇÁö ¾Ê¾Ò½À´Ï´Ù. ±× ÀÌÀ¯´Â ±âº» ¼³Á¤ÀÇ ·Î±× Ãâ·Â ·¹º§ÀÌ DEBUG À̱⠶§¹®ÀÔ´Ï´Ù.
À§¿Í °°ÀÌ Logback°ú °°Àº ·Î±ë ¶óÀ̺귯¸®¸¦ ÅëÇØ ¾î·ÆÁö ¾Ê°Ô ·Î±×¸¦ Ãâ·Â½Ãų ¼ö ÀÖ°í ·Î±×ÀÇ Ãâ·Â·¹º§, ÆÐÅÏ µîÀÇ ¼³Á¤À» ÇÒ ¼ö Àִµ¥¿ä. À̾ ¼³Á¤¿¡ ´ëÇÑ ³»¿ëÀ» ¸»¾¸µå¸®°Ú½À´Ï´Ù.

3. ¼³Á¤ÆÄÀÏ ¸¸µé±â

¾Æ¹« ¼³Á¤À» Àû¿ëÇÏÁö ¾ÊÀº »óÅ¿¡¼­ÀÇ °á°ú¸¦ À§ÀÇ [±âº» ÅÛÇø´] °úÁ¤¿¡¼­ È®ÀΠ ÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù. Áö±ÝºÎÅʹ ·Î±× ÆÐÅÏ, ±â·ÏÀ§Ä¡, Ãâ·Â·¹º§ µîÀ» ÇÊ¿ä¿¡ ¸Â°Ô ¼³Á¤ÇÒ ¼ö Àִ ¼³Á¤ÆÄÀÏÀ» ÀÛ¼ºÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸°Ú½À´Ï´Ù.

3-1. ¼³Á¤ÆÄÀÏÀÇ À§Ä¡

°¡Àå ¸ÕÀú ¼³Á¤ÆÄÀÏÀ» µÎ¾î¾ßÇÏ´Â À§Ä¡´Â Classpath ÀÔ´Ï´Ù. ¸¸ÀÏ Classpath¸¦ lib/ °ú °°ÀÌ ¼³Á¤ÇÏ¿´´Ù¸é lib/logback.xml°ú °°ÀÌ À§Ä¡½ÃÅ°¸é µË´Ï´Ù. ClasspathÀÇ ÇÏÀ§ µð·ºÅ丮 ¿¹¸¦µé¾î lib/somedir/ °ú °°Àº À§Ä¡¿¡ µÎ¸é ¼³Á¤Àº Àû¿ëµÇÁö ¾Ê½À´Ï´Ù.

Àû¿ëÇÒ ¼ö ÀÖ´Â ¼³Á¤ÆÄÀÏ¿¡´Â ÃÑ 3°³°¡ ÀÖ½À´Ï´Ù.

  1. logback.groovy
  2. logback-test.xml
  3. logback.xml

À§ ¼¼°³ÀÇ ÆÄÀÏÀº ¼ø¼­´ë·Î ³ôÀº ¿ì¼±¼øÀ§¸¦ °¡Áý´Ï´Ù. Áï, LogBackÀº Classpath¿¡¼­ À§ÀÇ ¼³Á¤ÆÄÀÏÀ» ¼ø¼­´ë·Î °Ë»öÇÏ¿© Àû¿ëÇÏ¸ç »óÀ§ ¿ì¼±¼øÀ§ÀÇ ¼³Á¤ÆÄÀÏÀ» ãÀ¸¸é ÇÏÀ§ ¼³Á¤ÆÄÀÏÀº °Ë»öÇÏÁö ¾Ê½À´Ï´Ù. ¸¸ÀÏ 3°³ÀÇ ÆÄÀÏÀÌ ¸ðµÎ ¾ø´Ù¸é ±âº» ¼³Á¤À» µû¸£°Ô µË´Ï´Ù.

ex) logback-test.xml °ú logback.xml ÆÄÀÏÀÌ µÑ ´Ù ÀÖÀ» °æ¿ì
>>> logback-test.xml ÀÇ ¼³Á¤À» Àû¿ë

3-2. ¼³Á¤ÆÄÀÏÀÇ ÁÖ¿ä Ç׸ñ

¼³Á¤ÆÄÀÏÀ» ÀÛ¼ºÇϱ⠾ռ­ ¼³Á¤ÇÒ ÁÖ¿ä Ç׸ñ¿¡ ´ëÇØ ¾Ë¾Æº¸°Ú½À´Ï´Ù.

  1. Level
    ·Î±×¿¡ ¼³Á¤ÇÒ ¼ö ÀÖ´Â ·¹º§Àº ÃÑ 5°¡Áö°¡ ÀÖ½À´Ï´Ù.%ec%ba%a1%ec%b2%98
    1) ERROR
    2) WARN
    3) INFO
    4) DEBUG
    5) TRACE
    À§ÀÇ ¼ø¼­´ë·Î ³ôÀº ·¹º§À» °¡Áö¸ç Ãâ·Â ·¹º§ÀÇ ¼³Á¤¿¡ µû¶ó ¼³Á¤ ·¹º§ ÀÌ»óÀÇ ·Î±×¸¦ Ãâ·Â.
    ex) Ãâ·Â·¹º§ : INFO  –> DEBUG, TRACE ·¹º§ÀÇ ·Î±×´Â Ãâ·ÂµÇÁö ¾ÊÀ½.
  2. Appender
    ·Î±×¸¦ Ãâ·Â ÇÒ À§Ä¡, Ãâ·Â Çü½Ä µîÀ» ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
    Logback-Core ¸ðµâÀ» ÅëÇØ »ç¿ëÇÒ ¼ö ÀÖ´Â ±âº»Àû Appender´Â 3°¡Áö°¡ ÀÖ½À´Ï´Ù.
    1) ConsoleAppender
    – ·Î±×¸¦ OutputStream¿¡ write ÇÏ¿©, ÃÖÁ¾ÀûÀ¸·Î Äֿܼ¡ Ãâ·ÂµÇµµ·Ï ÇÕ´Ï´Ù.
    2) FileAppender
    – ·Î±×ÀÇ ³»¿ëÀ» ÁöÁ¤µÈ File¿¡ ±â·ÏÇÕ´Ï´Ù.
    3) RollingFileAppender
    – FileAppender·Î ºÎÅÍ »ó¼Ó¹ÞÀº Appender·Î ³¯Â¥, ÃÖ´ë ¿ë·® µîÀ» ¼³Á¤ÇÏ¿© ÁöÁ¤ÇÑ ÆÄÀϸí ÆÐÅÏ¿¡ µû¶ó ·Î±×°¡ ´Ù¸¥ ÆÄÀÏ¿¡ ±â·ÏµÇµµ·Ï ÇÕ´Ï´Ù. À̸¦ ÀÌ¿ëÇÏ¿© ´ë·®ÀÇ ·Î±×¸¦ È¿°úÀûÀ¸·Î ±â·ÏÇÒ ¼ö ÀÖ½À´Ï´Ù.
    Logback-CoreÀÇ ±âº» Appender ¿Ü¿¡µµ Logback-Classic ¸ðµâÀÇ ´Ù¾çÇÑ Appender (SSLSocketAppender, SMTPAppender, DBAppender µî)À» »ç¿ëÇÏ¿© ·Î±×¸¦ ¿ø°ÝÀ§Ä¡¿¡ ±â·Ï ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
    AppenderµéÀÇ ÇÏÀ§ Ç׸ñÀ¸·Î Ãâ·Â Çü½Ä(Layout Pattern)À» ÁöÁ¤ÇÏ¿© °¢ Appender¸¶´Ù ¿øÇÏ´Â ³»¿ëÀ» Ãâ·Â½Ãų ¼ö ÀÖ½À´Ï´Ù.
    ex) %logger(Logger À̸§), %thread(ÇöÀç ½º·¹µå¸í), %level(·Î±× ·¹º§), %msg(·Î±×¸Þ½ÃÁö), %n(new line) µî
  3. Logger
    ½ÇÁ¦ ·Î±× ±â´ÉÀ» ¼öÇàÇÏ´Â °´Ã¼·Î °¢ Logger¸¶´Ù NameÀ» ºÎ¿©ÇÏ¿© »ç¿ëÇÕ´Ï´Ù.
    °¢ Logger ¸¶´Ù ¿øÇÏ´Â Ãâ·Â ·¹º§°ªÀ» ¼³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç, 0°³ ÀÌ»óÀÇ Appender¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. °¢ ¼Ò½º·ÎºÎÅÍ ÀԷ¹ÞÀº ·Î±ë ¸Þ½ÃÁö´Â ·Î±× ·¹º§¿¡ µû¶ó Appender·Î Àü´Þ µË´Ï´Ù.±âº»ÀûÀ¸·Î ÃÖ»óÀ§ ·Î°ÅÀΠRoot Logger¸¦ ¼³Á¤ÇØ ÁÖ¾î¾ßÇϸç, Ãß°¡·Î ÇÊ¿äÇÑ ·Î°Å¿¡ ´ëÇØ String ¶Ç´Â Ŭ·¡½º¸í Çü½ÄÀ¸·Î Logger NameÀ» Ãß°¡ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ LoggerÀÇ NameÀº .¹®ÀÚ¸¦ ±¸ºÐÀÚ·Î »ç¿ëÇÏ¿© °èÃþÀûÀ¸·Î È°¿ë ÇÒ ¼ö ÀÖ½À´Ï´Ù.

    ex)
     ¾Æ·¡¿Í °°ÀÌ Root ·Î°Å ¿Ü¿¡ 2°³ÀÇ ·Î°Å¸¦ Ãß°¡Çß´Ù°í °¡Á¤Çغ¸°Ú½À´Ï´Ù.
Logger NameÃâ·Â LevelAppenderAdditivity
RootDEBUGConsole 
VehicleINFO RollingFiletrue
Vehicle.CarERROR Filefalse

REPORT THIS AD

¿©±â¼­ Additivity´Â »óÀ§ Logger·ÎºÎÅÍÀÇ  »ó¼Ó ¿©ºÎ¸¦ ÀǹÌÇÕ´Ï´Ù. True(±âº»°ª)ÀÏ °æ¿ì, ¸ÕÀú ¸ðµç »óÀ§ ·Î°ÅµéÀÇ ¼³Á¤°ªÀ» »ó¼Ó¹Þ¾Æ ÇöÀç ·Î°Å¿¡ ¼³Á¤µÈ °ªÀ» ÀçÀû¿ë(µ¤¾î¾²±â) ½ÃÅ°¸ç, False·Î ¼³Á¤ÇÏ°Ô µÈ´Ù¸é ÇØ´ç ·Î°Å´Â »óÀ§ ·Î°ÅÀÇ ¼³Á¤³»¿ëÀ» »ó¼Ó¹ÞÁö ¾Ê½À´Ï´Ù.

Áï, VehicleÀÇ °æ¿ì Root ·Î°Å·ÎºÎÅÍ DEBUG ·¹º§ ¼³Á¤À» »ó¼Ó¹ÞÁö¸¸ ÇöÀç ·Î°Å¿¡ INFO ·¹º§ÀÌ Àû¿ëµÇ¾î Àֱ⠶§¹®¿¡ ÃÖÁ¾ÀûÀ¸·Î INFO ·¹º§ÀÌ Àû¿ëµÇ¸ç, Root ·Î°ÅÀÇ Console Appender¿Í Vehicle ·Î°ÅÀÇ RollingFile Appender ¸ðµÎ¿¡°Ô ·Î±× ¸Þ½ÃÁö¸¦ Àü´ÞÇÏ°Ô µË´Ï´Ù.

Vehicle.CarÀÇ °æ¿ì Additivity °ªÀÌ false À̱⠶§¹®¿¡ »óÀ§ ·Î°ÅÀÎ Root, Vehicle ·Î°Å·Î ºÎÅÍ ¼³Á¤À» »ó¼Ó¹ÞÁö ¾Ê¾Æ ÃÖÁ¾ÀûÀ¸·Î ERROR ·¹º§ ÀÌ»óÀÇ ·Î±×°¡ File Appender·Î Àü´ÞµÇ°Ô µË´Ï´Ù.

¸¸ÀÏ Logger ¼³Á¤µÇÁö ¾ÊÀº Ŭ·¡½º¸í( ex – Vehicle.Airplane)ÀÌ ÀԷµǾúÀ» °æ¿ì, »óÀ§ ·Î°ÅÀÎ VehicleÀÇ ¼³Á¤³»¿ëÀ¸·Î µ¿ÀÏÇÏ°Ô Àû¿ëµË´Ï´Ù.

3-3. ¼³Á¤ÆÄÀÏ ¿¹½Ã

¾Æ·¡ÀÇ ¼³Á¤ÆÄÀÏ(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
xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
    <property name="LOGS_ABSOLUTE_PATH" value="./logs" />
 
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss}][%-5level][%logger{36}] - %msg%npattern>
        encoder>
    appender>
 
    <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS_ABSOLUTE_PATH}/logback.logfile>
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%npattern>
        encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOGS_ABSOLUTE_PATH}/logback.%d{yyyy-MM-dd}.%i.logfileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy                  class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
        rollingPolicy>
    appender>
 
    <logger name="src.Main"  level="debug" additivity="false">
        <appender-ref ref="ROLLING" />
    logger>
 
    <logger name="src.Main.Child" additivity="true" />
 
    <root level="info">
        <appender-ref ref="STDOUT" />
    root>
 
configuration>

¼³Á¤ÆÄÀÏÀÇ ±âº»ÀûÀÎ ±¸Á¶´Â

1
2
3
4
5
6
7
 
     Appender ¼³Á¤
 
     Logger ¼³Á¤
 

À¸·Î µÇ¾î ÀÖ½À´Ï´Ù.

À§ÀÇ ¿¹½Ã ¼³Á¤ÆÄÀÏÀÇ °æ¿ì 2°¡ÁöÀÇ Appender(Console, Rollingfile), 3°¡ÁöÀÇ Logger( Root, src.Mainsrc.Main.Child)¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù. RollingFileAppenderÀÇ °æ¿ì ¸ÕÀú ±âº» ÆÄÀϸíÀ» °æ·Î¿Í ÇÔ²² ÁöÁ¤ÇÏ°í,  ·Î±× ÆÐÅÏ°ú Rolling ÆÄÀϸí ÆÐÅÏÀ» ÁöÁ¤ÇØ ÁÖ¸é µË´Ï´Ù.
¿¹½Ã¿¡¼­´Â ¸ÕÀú ³¯Â¥(yyyy-mm-dd)¸¦ ±âÁØÀ¸·Î ÆÄÀϸíÀ» RollingÇÏ°í, timeBasedFileNaming
AndTriggerPolicy Ç׸ñÀ» ÅëÇØ 100MBÀÇ ¿ë·® Á¦ÇÑÀ» ¼³Á¤ÇÏ¿© Rolling Çϵµ·Ï ÇÏ¿´½À´Ï´Ù. ¿©±â¼­ ¿ë·®Á¦ÇÑÀ» ¼³Á¤ÇÒ °æ¿ì ÆÄÀϸí ÆÐÅÏ¿¡ %i¿Í °°ÀÌ ÆÄÀÏ¸í¿¡ º¯È­¸¦ ÁÙ ¼ö ÀÖ´Â ÀÎÀÚ¸¦ Ãß°¡ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù.

configurationÀÇ ÇÏÀ§ Ç׸ñÀ¸·Î scan°ú scanPeriod Ç׸ñÀ» Ãß°¡ÇÏ¿© ¾Õ¼± °³¿ä±Û¿¡¼­ ¼³¸íµå·È´ø Auto-Reloading ±â´ÉÀ» È°¼ºÈ­ ½Ãų ¼öµµ ÀÖ½À´Ï´Ù. ±× ¿ÜÀÇ ¼³Á¤ ³»¿ëÀº º°´Ù¸¥ ¾î·Á¿ò ¾øÀÌ ÀÌÇØÇÏ½Ç ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.

Á»´õ ÀÚ¼¼ÇÑ ¼³Á¤³»¿ë¿¡ ´ëÇÑ ³»¿ëÀº http://logback.qos.ch/manual/configuration.html ¿¡¼­ È®ÀÎÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.

°¨»çÇÕ´Ï´Ù!!