LOG4J
I. µé¾î°¡¸é¼.. ±×¸®°í log4j
log4j´Â ÀÚ¹Ù ¾îÇø®ÄÉÀ̼ǿ¡¼ ºü¸£°í È¿°úÀûÀ¸·Î ·Î±ë ÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÖ´Â ¿ÀÇ ¼Ò½º ÇÁ·ÎÁ§Æ®ÀÔ´Ï´Ù.
·Î±ë(logging)Àº ÄÚµåÀÇ °¡µ¶¼ºÀ» ¶³¾î¶ß¸®´Â ´ÜÁ¡ÀÌ ÀÖÁö¸¸ ¾ÖÇø®ÄÉÀ̼ǿ¡ ¹®Á¦°¡ ÀÖÀ» ¶§ °³¹ßÀÚ°¡ ÀÚ¼¼ÇÑ »óȲÀ» ÆÄ¾ÇÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÖ¸ç Å×½ºÆÃ½Ã ºüÁú ¼ö ¾ø´Â ¿ä¼ÒÀÔ´Ï´Ù.
¾Æ¸¶µµ ¿©·¯ºÐµéÀº ¿©·¯ ¾îÇø®ÄÉÀ̼ÇÀÌ Ãß°¡µÇ¸é¼ °¢ °³¹ßÀڵ鸸ÀÇ µ¶Æ¯ÇÑ ·Î±ë¹æ½ÄÀÌ ¼·Î ½âÀÌ°í ¾ôÇô¼ ȸ鿡 ³ªÅ¸³ª´Â°ÍÀ» ¸¹ÀÌ ºÃÀ»°Ì´Ï´Ù -_-;
Áï ·Î±ë¹æ¹ýÀ» ÅëÀÏÇÒ Çʿ䰡 Àִ°ÍÀÌÁÒ. ¸ðµç °³¹ßÀÚ°¡ ƯÁ¤ Æ÷¸Ë¿¡ ¸ÂÃß¾î¼ ·Î±ë ÇÑ´Ù¸é ÇÑ°á ·Î±ëÇϱ⵵ ÆíÇϰÚÁö¿ä
¿ÀÇ ¼Ò½º ÇÁ·ÎÁ§Æ®ÀÎ Log4j´Â °³¹ßÀÚµéÀÌ ¸Å¿ì ¼Õ½±°í ´Ù¾çÇÑ ÇüÅ·Π·Î±ëÀ» ÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÝ´Ï´Ù. ¼º´É¶ÇÇÑ ¿ì¼öÇØ ´õÀÌ»ó System.out.printlnÀ» »ç¿ëÇÒ Çʿ䰡 ¾ø½À´Ï´Ù.
II. ´Ù¿î·Îµå
´Ù¿î·Îµå http://logging.apache.org/log4j/docs/download.html
¸Å´º¾ó http://logging.apache.org/log4j/docs/documentation.html
API spec http://logging.apache.org/log4j/docs/api/index.html
III. LOG4J ±¸Á¶
ÀÏ´Ü log4j¸¦ Àß ¸ð¸£Áö¸¸ ±× ±¸Á¶¸¸ »ì¦ »ìÆìº¸°í ³Ñ¾î°©½Ã´Ù
log4j´Â Å©°Ô 3°¡Áö ¿ä¼Ò·Î ±¸¼ºµÇ¸ç ±× ±¸Á¶´Â ´ÙÀ½°ú °°½À´Ï´Ù
¨ç Logger(Category) : ·Î±ë ¸Þ¼¼Áö¸¦ Appender¿¡ Àü´ÞÇÕ´Ï´Ù.
¨è Appender : Àü´ÞµÈ ·Î±ë ¸Þ¼¼Áö¸¦ ÆÄÀÏ¿¡´Ù ±â·ÏÇÒ °ÍÀÎÁö, Äֿܼ¡ Ãâ·ÂÇÒ °ÍÀÎÁö
¾Æ´Ï¸é DB¿¡ ÀúÀåÇÒ °ÍÀÎÁö ¸Å°³Ã¼ ¿ªÈ°À» ÇÕ´Ï´Ù.
¨é Layout : Appender°¡ ¾îµð¿¡ Ãâ·ÂÇÒ °ÍÀÎÁö °áÁ¤Çß´Ù¸é ¾î¶² Çü½ÄÀ¸·Î Ãâ·ÂÇÒ °ÍÀÌÁö
Ãâ·Â layoutÀ» °áÁ´ÇÕ´Ï´Ù.
½±ÁÒ?
IV. LOG4J ·Î±ë ·¹º§
log4j´Â ´Ù¾çÇÑ ·Î±ë·¹º§À» Áö¿øÇÕ´Ï´Ù.
¨ç FATAL : °¡Àå Å©¸®Æ¼ÄÃÇÑ ¿¡·¯°¡ ÀÏ¾î ³µÀ» ¶§ »ç¿ëÇÕ´Ï´Ù.
¨è ERROR : ÀÏ¹Ý ¿¡·¯°¡ ÀÏ¾î ³µÀ» ¶§ »ç¿ëÇÕ´Ï´Ù.
¨é WARN : ¿¡·¯´Â ¾Æ´ÏÁö¸¸ ÁÖÀÇÇÒ Çʿ䰡 ÀÖÀ» ¶§ »ç¿ëÇÕ´Ï´Ù.
¨ê INFO : ÀÏ¹Ý Á¤º¸¸¦ ³ªÅ¸³¾ ¶§ »ç¿ëÇÕ´Ï´Ù.
¨ë DEBUG : ÀÏ¹Ý Á¤º¸¸¦ »ó¼¼È÷ ³ªÅ¸³¾ ¶§ »ç¿ëÇÕ´Ï´Ù.
¸¸¾à ·Î±ë ·¹º§À» WARN À¸·Î ¼³Á¤ÇÏ¿´´Ù¸é ±× ÀÌ»ó ·¹º§¸¸ ·Î±ëÇÏ°Ô µË´Ï´Ù.
Áï WARN, ERROR, FATAL ÀÇ ·Î±ëÀÌ µË´Ï´Ù.
V. »ùÇÃÄÚµå 1
jsp¿¡¼ »ç¿ëÇÏ´Â ¿¹Á¦°¡ ¾ø¾î ¸¸µé¾î ºÃ½À´Ï´Ù.
test.jsp
<%@ page contentType="text/html;charset=MS949" <%! <% logger.fatal("fatal2!!", new NullPointerException("³ÎÀÔ´Ï´Ù¿ä")); logger.error("error!", new NumberFormatException()); logger.error("error!2"); logger.warn("warn"); logger.info("info"); logger.debug("debug");
|
°á°ú ÄܼÖȸé
¨ç static Logger logger = Logger.getLogger("test.jsp");
static ¸Þ¼Òµå getLogger¸¦ ÅëÇØ logger ÀνºÅϽº¸¦ °¡Á®¿É´Ï´Ù.
getLogger¿¡´Â ÆÄ¶ó¹ÌÅÍ·Î ½ºÆ®¸µ ȤÀº Ŭ·¡½º¸¦ »ç¿ëÇϴµ¥ jsp¿¡¼´Â Ŭ·¡½º¸¦ ÆÄ¶ó¹ÌÅÍ·Î Áֱ⿡´Â Á» ¾Ö¸ÅÇÕ´Ï´Ù. ±×³É ½ºÆ®¸µÀ¸·Î ÁÖµµ·Ï ÇÏÁö¿ä
¨è logger.fatal("fatal!!");
logger.fatal("fatal2!!", new NullPointerException("³ÎÀÔ´Ï´Ù¿ä"));
logger¿¡ fatal ·¹º§ÀÇ ¸Þ¼¼Áö¸¦ Àü´ÞÇÕ´Ï´Ù. ´ÙÀ½ µÎ°¡Áö ¸Þ¼Òµå¸¦ Áö¿øÇϴ±º¿ä
fatal(Object message)
fatal(Object message, Throwable t)
°¢ ·¹º§¸¶´Ù À§Ã³·³ µÎ°¡Áö ¸Þ¼Òµå¸¦ Áö¿øÇÕ´Ï´Ù.
Áö¿ø ¸Þ½îµå | |
logger.fatal(Object message) | logger.fatal(Object message, Throwable t) |
logger.error(Object message) | logger.error(Object message, Throwable t) |
logger.warn(Object message) | logger.warn(Object message, Throwable t) |
logger.info(Object message) | logger.info(Object message, Throwable t) |
logger.debug(Object message) | logger.debug(Object message, Throwable t) |
VI. »ùÇÃÄÚµå 2
¼ºí¸´ÀÇ °æ¿ì ´ÙÀ½°ú °°ÀÌ ÄÚµùÇÏ¸é µÇ°Ú±º¿ä
TestServlet.java
import javax.servlet.*; public class TestServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { ... } catch (Exception e) { |
VII. LOG4J ¼³Á¤
log4j ¼³Á¤Àº ÇÁ·Î±×·¥ ³»¿¡¼ ÇÒ ¼ö ÀÖÁö¸¸ ¼³Á¤ÆÄÀÏÀ» »ç¿ëÇÔÀ¸·Î¼ Á»´õ À¯¿¬ÇÏ°Ô log4jȯ°æÀ» ¸¸µé ¼ö ÀÖ½À´Ï´Ù.
¨ç ÇÁ·Î±×·¥¿¡¼ ¼³Á¤
<%@ page contentType="text/html;charset=MS949" import="org.apache.log4j.*,java.io.* " %> <%! <% PatternLayout patternlayout = new PatternLayout(layout); |
¨è property ÆÄÀÏ¿¡ ¼³Á¤
log4j.properties¸¦ ¸¸µé¾î /WEB-INF/classes ¹Ø¿¡ ³õÀ¸¼¼¿ä
log4j.rootLogger=INFO, stdout, rolling log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender log4j.appender.rolling.File=output.log log4j.appender.rolling.Append=true log4j.appender.rolling.DatePattern='.'yyyy-MM-dd log4j.appender.rolling.layout=org.apache.log4j.PatternLayout log4j.appender.rolling.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
|
#ÃÖ»óÀ§ Ä«Å×°í¸®¿¡ INFO·Î ·¹º§ ¼³Á¤ ¹× appender·Î stdout, rollingÀ» Á¤ÀÇ
log4j.rootLogger=INFO, stdout, rolling
#stdout ¾îÆæ´õ´Â Äֿܼ¡ »Ñ¸®°Ú´Ù´Â Á¤ÀÇ
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#stdout ¾îÆæ´õ´Â patternlayoutÀ» »ç¿ëÇϰڴٴ Á¤ÀÇ
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#ÆäÅÏÀº ´ÙÀ½°ú °°ÀÌ Æ÷¸ËÆÃ Çϰڴٴ °ÍÀ» Á¤ÀÇ
log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
#¿ª½Ã³ª rolling ¾îÆæ´õ´Â ÆÄÀϷΠó¸®ÇÑ´Ù¶ó°í Á¤ÀÇ
log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender
#·Î±× ÆÄÀÏ À̸§Àº output.log
log4j.appender.rolling.File=output.log
#true¸é ÅèĹÀ» ³»·È´Ù ¿Ã·Áµµ ÆÄÀÏÀÌ ¸®¼ÂµÇÁö ¾Ê½À´Ï´Ù.
log4j.appender.rolling.Append=true
#ÆÄÀÏ ÃÖ´ë »çÀÌÁî´Â 500KB·Î ¼³Á¤
log4j.appender.rolling.DatePattern='.'yyyy-MM-dd
#¿ª½Ã³ª rolling ¾îÆæ´õ´Â ÆÐÅÏ ·¹À̾ƿôÀ» »ç¿ëÇϰڴٰí Á¤ÀÇ
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
#rolling ¾îÆæ´õ´Â ÆÐÅÏ ·¹À̾ƿô Æ÷¸Ë
log4j.appender.rolling.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
VIII. ¼³Á¤ Æ÷¸Ë
¨ç ·Î±×ÆÄÀÏ¸í Æ÷¸Ë (DatePattern)
·Î±×ÆÄÀÏ¸í Æ÷¸ËÀÔ´Ï´Ù. ³¯Â¥, ½Ã°£ ¹× ºÐ´ÜÀ§·Î±îÁö ·Î±× ÆÄÀÏÀ» ºÐ¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
Çü½Ä | ¼³¸í |
'.'yyyy-MM | ¸Å´Þ ù¹øÂ°³¯¿¡ ·Î±×ÆÄÀÏÀ» º¯°æÇÕ´Ï´Ù |
'.'yyyy-ww | ¸ÅÁÖÀÇ ½ÃÀ۽à ·Î±×ÆÄÀÏÀ» º¯°æÇÕ´Ï´Ù. |
'.'yyyy-MM-dd | ¸ÅÀÏ ÀÚÁ¤¿¡ ·Î±×ÆÄÀÏÀ» º¯°æÇÕ´Ï´Ù. |
'.'yyyy-MM-dd-a | ÀÚÁ¤°ú Á¤¿À¿¡ ·Î±×ÆÄÀÏÀ» º¯°æÇÕ´Ï´Ù. |
'.'yyyy-MM-dd-HH | ¸Å ½Ã°£ÀÇ ½ÃÀÛ¸¶´Ù ·Î±×ÆÄÀÏÀ» º¯°æÇÕ´Ï´Ù. |
'.'yyyy-MM-dd-HH-mm | ¸ÅºÐ¸¶´Ù ·Î±×ÆÄÀÏÀ» º¯°æÇÕ´Ï´Ù. |
¨è PatternLayout Æ÷¸Ë
·Î±×ÀÚü¸¦ ¾î¶² Æ÷¸ËÀ¸·Î ³²±æÁö °áÁ¤ÇÕ´Ï´Ù.
layout¿¡´Â HTMLLayout, PatternLayout, SimpleLayout, XMLLayoutµîÀÌ ÀÖÀ¸¸ç PatternLayoutÀÌ ÀϹÝÀûÀ¸·Î °¡Àå ¸¹ÀÌ ¾²ÀÔ´Ï´Ù.
Çü½Ä | ¼³¸í |
%p | debug, info, warn, error, fatal µîÀÇ priority °¡ Ãâ·ÂµÈ´Ù. |
%m | ·Î±×³»¿ëÀÌ Ãâ·ÂµË´Ï´Ù |
%d | ·Î±ë À̺¥Æ®°¡ ¹ß»ýÇÑ ½Ã°£À» ±â·ÏÇÕ´Ï´Ù. Æ÷¸ËÀº %d{HH:mm:ss, SSS}, %d{yyyy MMM dd HH:mm:ss, SSS}°°Àº ÇüÅ·Π»ç¿ëÇϸç SimpleDateFormat¿¡ µû¸¥ Æ÷¸ËÆÃÀ» ÇÏ¸é µÈ´Ù |
%t | ·Î±×À̺¥Æ®°¡ ¹ß»ýµÈ ¾²·¹µåÀÇ À̸§À» Ãâ·ÂÇÕ´Ï´Ù. |
%% | % Ç¥½Ã¸¦ Ãâ·ÂÇϱâ À§ÇØ »ç¿ëÇÑ´Ù. |
%n | Ç÷§Æû Á¾¼ÓÀûÀÎ °³Ç๮ÀÚ°¡ Ãâ·ÂµÈ´Ù. \r\n ¶Ç´Â \n ÀϰÍÀÌ´Ù. |
%c | Ä«Å×°í¸®¸¦ Ç¥½ÃÇÕ´Ï´Ù ¿¹) Ä«Å×°í¸®°¡ a.b.c ó·³ µÇ¾îÀÖ´Ù¸é %c{2}´Â b.c°¡ Ãâ·ÂµË´Ï´Ù. |
%C | Ŭ·¡½º¸íÀ» Æ÷½ÃÇÕ´Ï´Ù. ¿¹) Ŭ·¡½º±¸Á¶°¡ org.apache.xyz.SomeClass ó·³ µÇ¾îÀÖ´Ù¸é %C{2}´Â xyz.SomeClass °¡ Ãâ·ÂµË´Ï´Ù |
%F | ·Î±ëÀÌ ¹ß»ýÇÑ ÇÁ·Î±×·¥ ÆÄÀϸíÀ» ³ªÅ¸³À´Ï´Ù. |
%l | ·Î±ëÀÌ ¹ß»ýÇÑ callerÀÇ Á¤º¸¸¦ ³ªÅ¸³À´Ï´Ù |
%L | ·Î±ëÀÌ ¹ß»ýÇÑ callerÀÇ ¶óÀμö¸¦ ³ªÅ¸³À´Ï´Ù |
%M | ·Î±ëÀÌ ¹ß»ýÇÑ method À̸§À» ³ªÅ¸³À´Ï´Ù. |
%r | ¾îÇø®ÄÉÀÌ¼Ç ½ÃÀÛ ÀÌÈÄ ºÎÅÍ ·Î±ëÀÌ ¹ß»ýÇÑ ½ÃÁ¡ÀÇ ½Ã°£(milliseconds) |
%x | ·Î±ëÀÌ ¹ß»ýÇÑ thread¿Í °ü·ÃµÈ NDC(nested diagnostic context)¸¦ Ãâ·ÂÇÕ´Ï´Ù. |
%X | ·Î±ëÀÌ ¹ß»ýÇÑ thread¿Í °ü·ÃµÈ MDC(mapped diagnostic context)¸¦ Ãâ·ÂÇÕ´Ï´Ù. |
¿¹½Ã) (°°Àº »ö³¢¸® º¸½Ã¸é µË´Ï´Ù)
À§ÀÇ test.jsp¸¦ ´ÙÀ½ Æ÷¸ËÀ¸·Î Ãâ·ÂÇØº»´Ù¸é
[%c] [%C] [%d] [%F] [%l] [%L] [%m] [%M] [%n] [%p] [%r] [%t] [%x] [%X]´Â ´ÙÀ½°ú °°´Ù
[test.jsp] [org.apache.jsp.test_jsp] [2005-03-10 12:37:23,561] [test_jsp.java] [org.apache.jsp.test_jsp._jspService(test_jsp.java:64)] [64] [fatal!!] [_jspService] [°³Çà] [FATAL] [765567] [http-8080-Processor25] [] []
=============================================
º»¹®¼´Â ÀÚÀ¯·Ó°Ô ¹èÆ÷/º¹»ç ÇÒ¼ö ÀÖÁö¸¸
À̹®¼ÀÇ ÀúÀÚ¿¡ ´ëÇÑ ¾ð±ÞÀ» »èÁ¦ÇÏ½Ã¸é ¾ÈµË´Ï´Ù
ÀúÀÚ : GoodBug (unicorn@jakartaproject.com)
ÃÖÃÊ : http://www.jakartaproject.com
=============================================