• ÇÁ¸®Ä«¿îÅÍ
  • Ç÷¡½ÃºÏ
  • ÇÁ¸®º¸µå
  • Àü±¤ÆÇ
  • À¥°øºÎ¹æ
  • Ä¿¹Â´ÏƼ
Log4J¶õ 2008.06.22 21:17
±Û¾´ÀÌ : ¿î¿µÀÚ Á¶È¸ : 613 Ãßõ : 0
¨ç Log4J¶õ
ÇÁ·Î±×·¥À» °³¹ßÇÏ´Â »ç¶÷À̶ó¸é ´©±¸³ª ·Î±×(log)¸¦ ³²±â°Ô ¸¶·ÃÀÌ´Ù. ¾î¶°ÇÑ ÇüÅ·δøÁö ·Î±×¸¦ ³²°Ü¼­ ÀÚ½ÅÀÌ ÀÛ¼ºÇÑ ÇÁ·Î±×·¥ÀÌ Á¤»óÀûÀ¸·Î ÀÛµ¿ÇÏ´ÂÁö, ȤÀº ½ÇÇà µµÁß¿¡ ¹®Á¦°¡ »ý°åÀ» ¶§¿¡µµ ·Î±×¸¦ Âü°íÇؼ­ ¾î´À ºÎºÐ¿¡ ¹®Á¦°¡ ÀÖ´ÂÁö ã¾Æº¸°ï ÇÑ´Ù.
°³¹ßÀÚ°¡ ¾Æ´Ñ ½Ã½ºÅÛÀ» °ü¸®ÇÏ´Â °æ¿ì¿¡µµ ·Î±×´Â ¸Å¿ì Áß¿äÇÏ´Ù. º¸¾È ´ã´çÀÚÀÇ °æ¿ì ´©°¡ ½Ã½ºÅÛ¿¡ ºÒ¹ýÀûÀ¸·Î Á¢±ÙÇÏ´ÂÁö °¨½ÃÇÒ ¶§¿¡µµ ·Î±×°¡ Áß¿äÇÑ ¿ªÇÒÀ» ÇÑ´Ù. ÀÌ·¸°Ô ´Ù¾çÇÑ »ç¶÷µé°ú ¿ëµµ·Î »ç¿ëÇÏ´Â ·Î±×¸¦ ¿©·¯ºÐÀº ¾î¶»°Ô »ý¼ºÇÏ°í °ü¸®ÇÏ°í ÀÖÀ»±î? System.out.println À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´Ü¼øÇÑ ·Î±×¶ó¸é »ó°ü ¾ø°ÚÁö¸¸ ·Î±×ÀÇ Çüŵµ ´Ù¾çÇÏ°í ¿©·¯ Á¶°ÇÀÌ ÁÖ¾îÁ®¾ß ÇÑ´Ù¸é ÀÌ·± ´Ü¼øÇÑ ¹æ¹ýÀ» »ç¿ëÇؼ­´Â ¿øÇÏ´Â ¸ñÇ¥¸¦ ´Þ¼ºÇϱâ Èûµé °ÍÀÌ´Ù.
·Î±×¸¦ ³²±â´Â ¹æ¹ý¿¡ Á» ´õ ÆíÇÏ°í ´Ù¾çÇÑ ±â´É°ú ¼º´É±îÁö º¸ÀåÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù¸é? ±×·¸´Ù. ¹Ù·Î log4j ¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. Log4j´Â ÀÌ·± ½Ã´ëÀÇ ´Ù¾çÇÑ ¿å±¸¸¦ ÃæÁ·½ÃÅ°±â À§ÇØ µîÀåÇÑ °ÍÀÌ´Ù. ÀÌ¹Ì log4j ÇÁ·ÎÁ§Æ®°¡ ½ÃÀÛ µÈÁö ¸î ³âÀÌ Áö³µ°í ±× µ¿¾È ÃæºÐÈ÷ °ËÁõµÇ¾úÀ¸¸ç ¾÷°è¿¡¼­µµ Ç¥ÁØó·³ ±»¾îÁ® À־ ¸¹Àº »ó¿ë Á¦Ç°¿¡µµ Æ÷ÇԵǾî ÀÖ´Ù. JDK 1.4 ¹öÀüºÎÅÍ´Â ÀϺΠ·Î±ë API°¡ Ãß°¡µÇ¾úÁö¸¸ log4j ó·³ ¸·°­ÇÏÁö´Â ¾Ê´Â µí ÇÏ´Ù.
 
¨è Log4J APIÀÇ ±â´É
Log4j ´Â ±âº»ÀûÀ¸·Î ´Ù¼¸°³ÀÇ ¿ì¼±±Ç(ÀÌÇÏ Priority) µî±ÞÀ¸·Î ¸Þ¼¼Áö¸¦ ·Î±ëÇÒ ¼ö ÀÖ´Ù.

¿Ï¼ºµÈ ¾îÇø®ÄÉÀ̼ǿ¡¼­´Â Ãâ·ÂµÇÁö ¾Ê¾Æ¾ß ÇÒ µð¹ö±ë ¸Þ¼¼ÁöµéÀ» ¾²±âÀ§ÇØ debug ¸¦ »ç¿ëÇ϶ó.
¾îÇø®ÄÉÀ̼ÇÀÇ verbose ¸ðµå¿¡¼­ Ãâ·ÂµÉ¸¸ÇÑ ¸Þ¼¼ÁöµéÀ» ·Î±ëÇϱâ À§ÇØ info ¸¦ »ç¿ëÇ϶ó.
¾îÇø®ÄÉÀ̼ÇÀÌ ÀÌ»ó¾øÀÌ °è¼Ó ½ÇÇàµÉ ¼ö ÀÖ´Â Á¤µµÀÇ °æ°í¸Þ¼¼Áö¸¦ ·Î±ëÇϱâ À§ÇØ warn À» »ç¿ëÇ϶ó.
¾îÇø®ÄÉÀ̼ÇÀÌ ±×·°Àú·° µ¹¾Æ°¥¸¸ÇÑ Á¤µµÀÇ ¿¡·¯¸Þ¼¼Áö¸¦ ·Î±ëÇϱâ À§ÇØ error ¸¦ »ç¿ëÇ϶ó.
¿¹¸¦µé¾î °ü¸®ÀÚ¿¡ ÀÇÇØ ÁÖ¾îÁø ¼³Á¤ÀÎÀÚ°¡ ¿Ã¹Ù¸£Áö ¾Ê¾Æ ÇϵåÄÚµùµÈ ±âº»°ªÀ» »ç¿ëÇØ¾ß ÇÒ °æ¿ì.
·Î±ëÈÄ¿¡ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ºñÁ¤»óÀûÀ¸·Î Á¾·áµÉ Ä¡¸íÀûÀÎ ¸Þ¼¼Áö¸¦ ·Î±ëÇϱâ À§ÇØ fatal À» »ç¿ëÇ϶ó.
ÇÁ·Î±×·¡¸Ó ¼öÁØ¿¡¼­ DEBUG ·¹º§ÀÌ ÇÊ¿äÇÏ´Ù¸é ¿î¿µÀÚ ¼öÁØ¿¡¼­´Â INFO·¹º§ÀÌ ÇÊ¿äÇÏ´Ù.

8.1.2 Log4J ¼³Ä¡
¾Æ·¡ÀÇ À§Ä¡¿¡¼­ ÆÄÀÏÀ» ´Ù¿î·Îµå ¹Þ´Â´Ù.
À§Ä¡ :
http://logging.apache.org/site/binindex.cgi ÆÄÀÏ : jakarta-log4j-1.2.8.zip
¿øÇÏ´Â Àå¼Ò¿¡ ¾ÐÃàÀ» Ç®¸é ¾Æ·¡¿Í °°Àº Æú´õ°¡ ³ªÅ¸³­´Ù.
 
Log4J¸¦ »ç¿ëÇϱâ À§Çؼ­´Â, Ŭ·¡½º Æнº¿¡ log4j-1.2.8À» Æ÷ÇÔÇØ¾ß ÇÑ´Ù. ¾Æ·¡ÀÇ ³»¿ëÀ» È®ÀÎÇϸé Ãß°¡ÇÏ´Â ¹æ¹ýÀ» ¾Ë ¼ö ÀÖ´Ù.

8.1.3 Log4J »ç¿ë
¨ç °£´ÜÇÑ ¿¹Á¦
¿ª½Ã³ª óÀ½ ÇÁ·Î±×·¥À» ½ÃÀÛÇÒ ¶§ ºüÁöÁö ¾Ê´Â ´Ü°ñÀÎ Hello ÇÁ·Î±×·¥À¸·Î ½ÃÀÛÇÏÀÚ.
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
public class SimpleLog {
 // Logger Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¹Þ¾Æ¿Â´Ù.
 static Logger logger = Logger.getLogger(SimpleLog.class);
 public SimpleLog() {}
 public static void main(String[] args) {
  /* ÄַܼΠ·Î±× Ãâ·Â À§ÇÑ °£´ÜÇÑ ¼³Á¤, ÀÌ ¼³Á¤ÀÌ ¾ø´Ù¸é °æ°í ¸Þ¼¼Áö°¡ Ãâ·ÂµÇ¸é¼­ ½ÇÇàÀÌ ÁߴܵȴÙ. */
  BasicConfigurator.configure();
  logger.debug("Hello log4j.");
  logger.info("Hello log4j.");
  logger.warn("Hello log4j.");
  logger.error("Hello log4j.");
  logger.fatal("Hello log4j.");
  /*loger.log( Level.DEBUG , "debug"); ¿Í µ¿ÀÏÇÏ´Ù.  */
 }
}
½ÇÇà
------------------------------------------------------
------------------------- java ------------------------

0 [main] DEBUG SimpleLog - Hello log4j.
10 [main] INFO SimpleLog - Hello log4j.
10 [main] WARN SimpleLog - Hello log4j.
10 [main] ERROR SimpleLog - Hello log4j.
10 [main] FATAL SimpleLog - Hello log4j.
Ãâ·Â ¿Ï·á (1ÃÊ °æ°ú) - Á¤»ó Á¾·á

¸Ç ¾Õ¿¡ µîÀåÇÏ´Â ¼ýÀÚ´Â ·Î±ë È£Ãâ·ÎºÎÅÍ ¾ó¸¶¸¸Å­ÀÇ ½Ã°£ÀÌ Áö³µ´ÂÁö¸¦ ¹Ð¸®¼¼ÄÁµå ´ÜÀ§·Î º¸¿©ÁØ´Ù. ÀÌ Á¤º¸´Â º°·Î À¯¿ëÇÒ °Í °°Áö´Â ¾Ê´Ù. ´ÙÀ½¿¡ º¸ÀÌ´Â [main] Àº È£ÃâÇÑ ¾²·¹µåÀÇ À̸§À» ³ªÅ¸³½´Ù. ´ÙÀ½¿¡ ³ªÅ¸³ª´Â DEBUG , INFO , WARN µîÀº ·Î±× ·¹º§ÀÌ´Ù. ¼Ò½º Äڵ忡¼­ ÁöÁ¤ÇÑ ·¹º§À» ±×´ë·Î Ãâ·ÂÇØÁÖ°í ÀÖ´Ù. ±× µÚ¿¡ ³ª¿À´Â °ÍÀº º¸½Ã´Ù½ÃÇÇ Å¬·¡½ºÀÇ À̸§°ú ½ÇÁ¦ ·Î±× ¸Þ½ÃÁö¸¦ º¸¿©ÁØ´Ù. Ưº°È÷ À¯¿ëÇÑ ¿¹Á¦´Â ¾Æ´ÏÁö¸¸ »ç¿ëÇÏ´Â ¹æ¹ý¿¡ µû¶ó System.out.println º¸´Ù´Â ±×·² µí ÇØ º¸ÀδÙ. ¿¹Á¦¿¡´Â Æ÷ÇԵǾî ÀÖÁö ¾ÊÁö¸¸ ·Î±×¸¦ Ãâ·ÂÇÒÁö¸¦ °áÁ¤ÇÏ´Â Ç÷¡±× °ªÀ» »ç¿ëÇϰųª ·¹º§·Î Á¦ÇÑÀ» Çϵµ·Ï ¼öÁ¤ÇÏ¸é ±Ý»ó÷ȭÀÏ °ÍÀÌ´Ù.
¨è Log4JÀÇ ÄÄÆ÷³ÍÆ®
Log4J´Â ¾Æ·¡¿Í °°ÀÌ Áß¿äÇÑ ÄÄÆ÷³ÍÆ®°¡ ÀÖ´Ù.

logger : ·Î±×ÀÇ ÁÖüÀÌ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÒ ¶§ ·Î±ëÀ» ½ÃÀÛÇϱâ Àü¿¡ ¾î¶² ·Î°Å¸¦ »ç¿ëÇÒÁö¸¦ °áÁ¤ÇÏ´Ù.
static Logger logger = Logger.getLogger(SimpleLog.class);

appender : ·Î±×¸¦ Ãâ·ÂÇÏ´Â À§Ä¡ÀÌ´Ù. Äֿܼ¡ Ãâ·ÂÇÒ ¼ö ÀÖÀ¸¸ç, ÅؽºÆ® ÆÄÀÏ¿¡ ±â·ÏÇÒ ¼öµµ ÀÖ´Ù.
layout : ·Î±×¸¦ Ãâ·ÂÇϱâ À§ÇÑ ·¹À̾ƿôÀÌ´Ù. ÀÏÀÚ,½Ã°£,Ŭ·¡½º¸íµî ¿©·¯°¡Áö¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

¨é Appender
Log4J API¹®¼­¸¦ º¸¸é ±âº»ÀûÀ¸·Î XXXAppender·Î ³¡³ª´Â Ŭ·¡½ºµé ÀÖ´Ù.
http://logging.apache.org/log4j/docs/api/index.html
¾îÆæ´õ´Â Ŭ·¡½º À̸§¸¸À¸·Î »ç¿ë ¿ëµµ¸¦ ÁýÀÛÇÒ ¼ö ÀÖÀ»¸¸ÇÑ °ÍÀÌ ¸¹´Ù. ¿©±â¿¡¼­´Â ¸î¸î°³¸¸ ´Ù·ïº¸ÀÚ.
¾îÆæ´õÀÇ Ãâ·ÂÆ÷¸ËÀ» °áÁ¤ÇÏ´Â ·¹À̾ƿôÀº DateLayout, HTMLLayout, PatternLayout, SimpleLayout, XMLLayout ÀÇ 5°³°¡ ÀÖ´Ù. ÀϹÝÀûÀ¸·Î PatternLayoutÀ» »ç¿ëÇÏ´Â °ÍÀÌ µð¹ö±ë¿¡´Â °¡Àå ÀûÇÕÇÏ´Ù.
ÀÚ¼¼ÇÑ ÆÐÅÏÀº ¾Æ·¡ÀÇ Å¬·¡½º¸¦ »ìÆ캻´Ù.

import java.io.IOException;
import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
public class DailyLog
{
 static Logger logger = Logger.getLogger(DailyLog.class);
 public static void main(String[] args)
 {
  String pattern = "[%d{yyyy-MM-dd HH:mm:ss}] %-5p [%l] - %m%n";
  PatternLayout layout = new PatternLayout(pattern);
  // óÀ½ »ý¼ºµÉ ·Î±× ÆÄÀÏÀÇ À̸§
  String filename = "DailyLog.log";
  // ³¯Â¥ ÆÐÅÏ¿¡ µû¶ó Ãß°¡µÉ ÆÄÀÏ À̸§
  String datePattern = ".yyyy-MM-dd";
  DailyRollingFileAppender appender = null;
  try
  {
   appender = new DailyRollingFileAppender(layout, filename, datePattern);
  } catch (IOException ioe) { ioe.printStackTrace(); }
  logger.addAppender(appender);
  logger.debug("Hello log4j.");
 }
}
½ÇÇà
------------------------------------------------------
------------------------- java ------------------------
 
Ãâ·Â ¿Ï·á (1ÃÊ °æ°ú) - Á¤»ó Á¾·á
DailyLog.log ÆÄÀÏÀ» ¿­¾îº¸¸é ¾Æ·¡¿Í °°Àº ³»¿ëÀÌ Ãß°¡µÈ°ÍÀ» ¾Ë ¼ö ÀÖ´Ù.
[2004-07-29 17:36:05] DEBUG [DailyLog.main(DailyLog.java:30)] - Hello log4j.
 
ÆÄÀÏÀÇ ³»¿ëÀº ¼Ò½º Äڵ忡¼­ Á¤ÀÇµÈ ÆÐÅÏÀÎ "[%d{yyyy-MM-dd HH:mm:ss}] %-5p [%l] - %m%n" ¿¡ µû¶ó »ý¼ºµÈ °ÍÀÌ´Ù. Ãâ·ÂµÈ °Í°ú ´ëÁ¶Çغ¸¸é ´ëÃæ ¾î¶² ÀǹÌÀÎÁö À¯Ãß°¡ °¡´ÉÇÏ´Ù. ù¹ø° ³»¿ëÀº ³¯Â¥¸¦ ³ªÅ¸³½´Ù. ³¯Â¥¸¦ ³ªÅ¸³»´Â Çüŵµ SimpleDateFormat À» »ç¿ëÇÏ´Â °Íó·³ ¿øÇÏ´Â ÇüÅ·Π°¡´ÉÇÏ´Ù. ´ÙÀ½¿¡ º¸ÀÌ´Â °ÍÀº ·Î±× ·¹º§ÀÌ¸ç ´ÙÀ½¿¡ º¸ÀÌ´Â °ÍÀº [ÆÐÅ°Áö À̸§.Ŭ·¡½º À̸§.¸Þ¼Òµå À̸§(¼Ò½º ÆÄÀÏ À̸§:¼Ò½º ¶óÀÎ ³Ñ¹ö)] ÀÌ´Ù. ±×¸®°í ¸¶Áö¸·À¸·Î ½ÇÁ¦ ·Î±× ³»¿ëÀ» º¸¿©ÁØ´Ù. Ãâ·Â ÆÐÅÏÀº ÀÌ¿Ü¿¡µµ ¸¹Àº °ÍµéÀÌ Àִµ¥ ÀÚ¼¼ÇÑ »çÇ×Àº log4j API ¹®¼­¸¦ Âü°íÇϵµ·Ï ÇÏÀÚ.
¨ê properties ÆÄÀÏ ÀÌ¿ëÇϱâ
¾ÖÇø®ÄÉÀ̼ǿ¡¼­ °¢ Ŭ·¡½º´Â °¢°¢ÀÇ ·Î°Å¸¦ °¡Áö°Å³ª °øÅëÀÇ ·Î°Å¸¦ °¡Áú ¼ö ÀÖ´Ù. Log4j´Â ¸ðµç ·Î°Å°¡ »ó¼ÓÇÒ ¼ö ÀÖ´Â ·çÆ® ·Î°Å¸¦ Á¦°øÇÑ´Ù. log4j.properties¸¦ ¸¸µé¶§µµ ¸Ç À§¿¡ ÇÊ¿äÇÑ °ÍÀÌ ·çÆ®·Î°Å¿¡ ´ëÇÑ ³»¿ëÀÌ´Ù.

#log4j.rootLogger=DEBUG, A1
log4j.rootLogger=OFF, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] - %m%n
 
log4j.propertiesÀ̸§ÀÇ ÆÄÀÏ¿¡ À§ÀÇ ÇàÀ» Ãß°¡ÇÏ¿© LogProperty.class¿Í °°Àº À§Ä¡¿¡ ÀúÀåÇÑ´Ù.(LogProperty.class(LogProperty.java¸¦ ÄÄÆÄÀÏÇÑ ÈÄ »ý¼ºÆÄÀÏ)
 
¾Æ·¡ ¹®¼­´Â log¸¦ Ãâ·ÂÇÒ ÀÚ¹Ù¹®¼­ÀÌ´Ù.
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class LogProperty
{
 static Logger logger = Logger.getLogger(LogProperty.class);
 public static void main(String[] args)
 {
  logger.debug("Hello log4j.");
 }
}
½ÇÇà
------------------------------------------------------
------------------------- java ------------------------
 
Ãâ·Â ¿Ï·á (1ÃÊ °æ°ú) - Á¤»ó Á¾·á
È­¸é¿¡ Ãâ·ÂµÇ´Â ·Î±×´Â ¾ø´Ù. ¾Æ·¡¿Í °°ÀÌ º¯°æÇÑ ÈÄ ´Ù½Ã LogProperty¸¦ ½ÇÇàÇÑ´Ù.
log4j.rootLogger=DEBUG, A1
#log4j.rootLogger=OFF, A1
¾Æ·¡¿Í °°ÀÌ °á°ú°¡ ³ªÅ¸³¯ °ÍÀÌ´Ù.
------------------------------------------------------
------------------------- java ------------------------
 
[2004-07-29 18:10:33] - Hello log4j.
Ãâ·Â ¿Ï·á (3ÃÊ °æ°ú) - Á¤»ó Á¾·á
 
¶Ç ´Ù¸¥ ¿¹¸¦ µé¾îº¸ÀÚ. log4j.properties ¸¦ ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤ÇÑ´Ù.
log4j.rootLogger=DEBUG, A1
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=test.log
log4j.appender.A1.DatePattern='.'yyyy-mm-dd
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %-5p [%l] - %m%n

LogProperty.java ¹®¼­¸¦ ´Ù½Ã ½ÇÇàÇÏ¸é °°Àº Æú´õ¿¡ test.log ÆÄÀÏÀÌ »ý¼ºµÈ´Ù. test.logÆÄÀÏÀ» ¿­¾îº»´Ù.
[2004-07-29 18:17:35] DEBUG [LogProperty.main(LogProperty.java:16)] - Hello log4j.
Âü°í¹®Çå
http://jakarta.apache-korea.org/log4j/documentation.html
http://blog.naver.com/owlish/80004419128
¸ðµ¨ 2·Î ´Ù½Ã ¹è¿ì´Â JSP [ÇѺû¹Ìµð¾î]
http://50001.com ÀÚ¹ÙSide ½Ã»ð ÁøÀº¿µ´Ô ±Û
 
 
 



==============================================================
 
 
Log4j¿¡¼­ ¿©·¯ÆÄÀÏ¿¡ ·Î±×¸¦ ³²±â´Â ¹æ¹ý¿¡ ´ëÇؼ­ Àá½Ã ¾ð±ÞÇÏ°Ú½À´Ï´Ù.
¾Æ·¡ ºÎºÐ¿¡¼­´Â Á¸ÄªÀ» »« ´Ü¾î¸¦ »ç¿ëÇÕ´Ï´Ù.
 
!-----------------------------------------------------------------------------!
! category(logger) ¼³Á¤                                                                                    !
!-----------------------------------------------------------------------------!
log4j.debug=true
#log4j.disable=INFO
log4j.rootLogger=DEBUG, CONSOL, SYSTEM
 
 
!-----------------------------------------------------------------------------!
! appender(log destinations/targets) ¿Í ¿É¼ÇµéÀ» ¼³Á¤                                         !
!-----------------------------------------------------------------------------!
! FILE¿¡ ·Î±× ¾²±â, ÁöÁ¤ÇÑ Å©±â¸¦ ³Ñ¾î¼­¸é ÆÄÀÏÀ» ±³Ã¼
log4j.appender.CONSOL=org.apache.log4j.ConsoleAppender
! ·Î±×¸Þ¼¼ÁöµéÀÌ ÀüÇô ¹öÆÛµÇÁö ¾Ê´Â °ÍÀ» ÀǹÌÇÏ¸ç ´ëºÎºÐÀÇ »óȲ¿¡ Àû´çÇÏ´Ù.
log4j.appender.CONSOL.ImmediateFlush=true
! ÀÌ appender ´Â ¿©±â ¸í½ÃµÈ priority ¿Í °°°Å³ª ³ôÀº ¸Þ¼¼Áö¸¸ ·Î±ëÇÑ´Ù
log4j.appender.CONSOL.Threshold=DEBUG
! Layout Çü½Ä : TTCCLayout, HTMLLayout,  XMLLayout, PatternLayout, SimpleLayout
! PatternLayout, SimpleLayout - ÀÚ¹ÙÀÇ Throwable ¿¡·¯µé°ú ¿¹¿Ü¸¦ ¹«½ÃÇÑ´Ù
log4j.appender.CONSOL.layout=org.apache.log4j.PatternLayout
! %l - ¼Ò½ºÄÚµåÀÇ À§Ä¡Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù. %C. %M(%F:%L) ÀÇ Ãà¾àÇüÀÌ´Ù
log4j.appender.CONSOL.layout.ConversionPattern=%-5p %l %x =>%m%n
 
 
 
log4j.appender.SYSTEM=org.apache.log4j.DailyRollingFileAppender
log4j.appender.SYSTEM.File=C:/logs/
system.html
! ¸ÅÀÏ ÀÚÁ¤¿¡ ·Î±×ÆÄÀÏÀ» ±³Ã¼ÇÏ¸ç ±âÁ¸ÆÄÀÏÀº xx.log_2004.07.12
log4j.appender.SYSTEM.DatePattern='.'yyyy-MM-dd
log4j.appender.SYSTEM.Threshold=DEBUG
! ÀÚ¹ÙÀÇ Throwable ¿¡·¯µé°ú ¿¹¿Ü¸¦ Æ÷ÇÔÇϱâ À§ÇØ HTMLLayoutÀ» »ç¿ëÇÑ´Ù.
log4j.appender.SYSTEM.layout=org.apache.log4j.HTMLLayout
! [%d{yyyy-MM-dd}Çü½ÄÀº ÇÁ·Î±×·¥ÀÇ ½ÇÇà¼Óµµ¸¦ ´À¸®°Ô ÇÔÀ¸·Î SimpleDateFormat Çü½ÄÁöÁ¤ÇÑ´Ù.
log4j.appender.SYSTEM.layout.DateFormat=ISO8601
! [YYYY-MM-DD HH:MM:SS, mm] Çü½ÄÀ» ¶æÇÑ´Ù.
log4j.appender.SYSTEM.layout.TimeZoneID=GMT-8:00
! %l - ¼Ò½ºÄÚµåÀÇ À§Ä¡Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù. %C. %M(%F:%L) ÀÇ Ãà¾àÇüÀÌ´Ù
log4j.appender.SYSTEM.layout.ConversionPattern=[%d] %-5p %l - %m%n
 
 
 
! °¢ ¾÷¹« »óÀ§ÆÐÅ°Áö¸¦ ÁöÁ¤ÇÏ¿© logging ¼ÂÆÃÇÑ´Ù.

log4j.logger.rkhwang.biz.protoss=DEBUG, PROTOSS
log4j.logger.rkhwang.biz.teran=DEBUG
, TERAN
log4j.logger.rkhwang.biz.zerg=DEBUG,
ZERG
 
 
log4j.appender.PROTOSS=org.apache.log4j.DailyRollingFileAppender
log4j.appender.PROTOSS.File=C:/logs/protoss.log
log4j.appender.PROTOSS.DatePattern='.'yyyy-MM-dd
log4j.appender.PROTOSS.Threshold=DEBUG
log4j.appender.PROTOSS.layout=org.apache.log4j.PatternLayout
log4j.appender.PROTOSS.layout.DateFormat=ISO8601
log4j.appender.PROTOSS.layout.TimeZoneID=GMT-8:00
log4j.appender.PROTOSS.layout.ConversionPattern=[%d] %-5p %l - %m%n
 
log4j.appender.TERAN=org.apache.log4j.DailyRollingFileAppender
log4j.appender.TERAN.File=C:/logs/teran.log
log4j.appender.TERAN.DatePattern='.'yyyy-MM-dd
log4j.appender.TERAN.Threshold=DEBUG
log4j.appender.TERAN.layout=org.apache.log4j.PatternLayout
log4j.appender.TERAN.layout.DateFormat=ISO8601
log4j.appender.TERAN.layout.TimeZoneID=GMT-8:00
log4j.appender.TERAN.layout.ConversionPattern=[%d] %-5p %l - %m%n
 
log4j.appender.ZERG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ZERG.File=C:/logs/zerg.log
log4j.appender.ZERG.DatePattern='.'yyyy-MM-dd
log4j.appender.ZERG.Threshold=DEBUG
log4j.appender.ZERG.layout=org.apache.log4j.PatternLayout
log4j.appender.ZERG.layout.DateFormat=ISO8601
log4j.appender.ZERG.layout.TimeZoneID=GMT-8:00
log4j.appender.ZERG.layout.ConversionPattern=[%d] %-5p %l - %m%n
 
C:/logs/ ¿¡ ÇØ´ç ÆÐÅ°Áö(¾÷¹«)º°·Î ·Î±×¸¦ µû·Î °ü¸®°¡ ¿ëÀÌÇØ Áø´Ù.
log4j¸¦ »ç¿ëÇÒ °æ¿ì SYSTEM Log°¡ ¸¹ÀÌ ¹ß»ýÇÏ¿© µð¹ö±×, ¿¡·¯ ¸Þ¼¼Áö¸¦ º¸±â°¡ Èûµì´Ï´Ù.
 À§¿Í °°ÀÌ ÇÒ °æ¿ì, ÇØ´ç ·Î±×¿¡´Â system¿¡¼­ ¹ß»ýÇÏ´Â log´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.
½Ã½ºÅÛ¿¡¼­¹ß»ýÇÏ´Â ·Î±×´Â systeml.htmlÆÄÀÏÀ» º¸½Ã¸é µË´Ï´Ù.
TipÀ̶ó°í ÇÒ ¼ö ÀÖÀ» Áö ¸ð¸£Áö¸¸, ¸¹ÀÌ µµ¿òÀ» ¹ÞÀº Àú·Î½á´Â ´Ù¸¥ ºÐµéÀÌ µµ¿òÀÌ µÇ¾úÀ¸¸é ÇÏ´Â ¸¶À½¿¡ ±ÛÀ» ¿Ã¸³´Ï´Ù.
 
 
============================================================
 
¿ªÀÚ: noct ( http://www.noct.pe.kr/ )
¿øº» : http://www.vipan.com/htdocs/log4jhelp.html

                 System.out.println À» »ç¿ëÇÏÁö ¸»°í Log4j ¸¦ »ç¿ëÇ϶ó.




                 Log4j¸¦ »ç¿ëÇϱâ À§ÇÑ ºü¸¥ ½ÃÀÛ


- log4j ¼ÒÇÁÆ®¿þ¾î(¾à 2.3MB)¸¦ ´Ù¿î·ÎµåÇؼ­ log4j.jar (¾à 156KB)¸¦ ÃßÃâÇ϶ó.
logging ¸Þ¼Òµå°¡ ÇÊ¿äÇÑ Å¬·¡½ºµéÀ» ãÀ» ¼ö ÀÖµµ·Ï log4j.jar ÆÄÀÏÀ» ¾îÇø®ÄÉÀ̼ÇÀÇ Å¬·¡½ºÆнº¿¡ Æ÷ÇÔ½ÃÄѶó.
(ÇÊÀÚ´Â log4j.jar ÆÄÀÏÀ» ÀÚ¹Ù ¼³Ä¡ µð·ºÅ丮 ¹ØÀÇ lib/ext µð·ºÅ丮¿¡ Ä«ÇÇÇß´Ù. ¿Ö³ÄÇϸé ÀÚ¹Ù´Â ÀÚµ¿ÀûÀ¸·Î
±× µð·ºÅ丮¿¡¼­ ¾ò¾î¿À°í Ŭ·¡½ºÆнº¿¡ Ãß°¡Çϱ⠶§¹®ÀÌ´Ù.)

- ´ÙÀ½ÀÇ ¿¹Á¦Äڵ带 TestLogging.java ·Î ÀúÀåÇØ¿© Ŭ·¡½ºÆнº·Î ÁöÁ¤µÈ µð·ºÅ丮¿¡ À§Ä¡½ÃÅ°¶ó.

import org.apache.log4j.*;

// log4j »ç¿ë¹æ¹ý
public class TestLogging {

// loggin Ä«Å×°í¸®¸¦ ÃʱâÈ­ÇÑ´Ù.  ¿©±â¼­ THE ROOT CATEGORY ¸¦ ¾ò´Â´Ù
//static Category cat = Category.getRoot();
// ¶Ç´Â »ç¿ëÀÚ Á¤ÀÇ category¸¦ ¾ò´Â´Ù
static Category cat = Category.getInstance(TestLogging.class.getName());

// ¿©±â¼­ºÎÅÍ ·Î±ëÇÑ´Ù!  ÇØ´ç¸Þ¼Òµåµé: cat.debug(·Î±×¸Þ¼¼Áö¹®ÀÚ¿­),
// cat.info(...), cat.warn(...), cat.error(...), cat.fatal(...)

public static void main(String args[]) {
   // ¸î°¡Áö ·Î±ë ¸Þ¼Òµåµé.
   cat.debug("Start of main()");
   cat.info("Just testing a log message with priority set to INFO");
   cat.warn("Just testing a log message with priority set to WARN");
   cat.error("Just testing a log message with priority set to ERROR");
   cat.fatal("Just testing a log message with priority set to FATAL");

   // ´ëüÇÒ ¼ö ÀÖÁö¸¸ ºÒÆíÇÑ Çü½Ä
   cat.log(Priority.DEBUG, "Calling init()");
  
   new TestLogging().init();
}

public void init() {
   java.util.Properties prop = System.getProperties();
   java.util.Enumeration enum = prop.propertyNames();

   cat.info("***System Environment As Seen By Java***");
   cat.debug("***Format: PROPERTY = VALUE***");

   while (enum.hasMoreElements()) {
       String key = (String) enum.nextElement();
       cat.info(key + " = " + System.getProperty(key));
   }
}

}

Log4j ´Â ±âº»ÀûÀ¸·Î ´Ù¼¸°³ÀÇ ¿ì¼±±Ç(ÀÌÇÏ Priority) µî±ÞÀ¸·Î ¸Þ¼¼Áö¸¦ ·Î±ëÇÒ ¼ö ÀÖ´Ù.

1. ¿Ï¼ºµÈ ¾îÇø®ÄÉÀ̼ǿ¡¼­´Â Ãâ·ÂµÇÁö ¾Ê¾Æ¾ß ÇÒ µð¹ö±ë ¸Þ¼¼ÁöµéÀ» ¾²±âÀ§ÇØ debug ¸¦ »ç¿ëÇ϶ó.
2. ¾îÇø®ÄÉÀ̼ÇÀÇ verbose ¸ðµå¿¡¼­ Ãâ·ÂµÉ¸¸ÇÑ ¸Þ¼¼ÁöµéÀ» ·Î±ëÇϱâ À§ÇØ info ¸¦ »ç¿ëÇ϶ó.
3. ¾îÇø®ÄÉÀ̼ÇÀÌ ÀÌ»ó¾øÀÌ °è¼Ó ½ÇÇàµÉ ¼ö ÀÖ´Â Á¤µµÀÇ °æ°í¸Þ¼¼Áö¸¦ ·Î±ëÇϱâ À§ÇØ warn À» »ç¿ëÇ϶ó.
4. ¾îÇø®ÄÉÀ̼ÇÀÌ ±×·°Àú·° µ¹¾Æ°¥¸¸ÇÑ Á¤µµÀÇ ¿¡·¯º£¼¼Áö¸¦ ·Î±ëÇϱâ À§ÇØ error ¸¦ »ç¿ëÇ϶ó.
¿¹¸¦µé¾î °ü¸®ÀÚ¿¡ ÀÇÇØ ÁÖ¾îÁø ¼³Á¤ÀÎÀÚ°¡ ¿Ã¹Ù¸£Áö ¾Ê¾Æ ÇϵåÄÚµùµÈ ±âº»°ªÀ» »ç¿ëÇØ¾ß ÇÒ °æ¿ì.
5. ·Î±ëÈÄ¿¡ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ºñÁ¤»óÀûÀ¸·Î Á¾·áµÉ Ä¡¸íÀûÀÎ ¸Þ¼¼Áö¸¦ ·Î±ëÇϱâ À§ÇØ fatal À» »ç¿ëÇ϶ó.


- ´ÙÀ½ÀÇ ¸îÁÙÀ» log4j.properties ¶ó´Â À̸§ÀÇ ÆÄÀÏ·Î ÀúÀåÇÏ°í TestLogging.class ÆÄÀÏ°ú °°Àº µð·ºÅ丮¿¡ ÀúÀåÇ϶ó.
(TestLogging.java ÆÄÀÏÀ» ÄÄÆÄÀÏ ÇÑ ÈÄ¿¡)
Log4j´Â ±âº»ÀûÀ¸·Î getRoot()°¡ È£ÃâµÇ°Å³ª getInstatnce("category_name") ÀÌ ÄÚµå»ó¿¡¼­ È£ÃâµÇ¾úÀ» ¶§
¾îÇø®ÄÉÀ̼ÇÀÇ Å¬·¡½ºÆнº¿¡¼­ ÀÌ ÆÄÀÏÀ» ÂþÀ» °ÍÀÌ´Ù.


log4j.rootCategory=DEBUG, dest1
log4j.appender.dest1=org.apache.log4j.ConsoleAppender
log4j.appender.dest1.layout=org.apache.log4j.PatternLayout


PatternLayout Àº ±âº»ÀûÀ¸·Î »ç¿ëÀÚ°¡ ÀÛ¼ºÇÏ´Â ¸Þ¼¼Áö¿Í °³ÇàÀ» ÀǹÌÇÏ´Â %m %n ÀÇ ÇüÅÂÀÌ´Ù.
ÀÌ°ÍÀº Log4jÀÇ ¸Þ¼ÒµåµéÀÇ ¿©·¯ ÀåÁ¡Áß¿¡ ¾²±â¿¡ ´õ ª´Ù´Â °ÍÀ» Á¦¿ÜÇÏ°í´Â
JavaÀÇ System.out.println(...) ¸Þ¼Òµå¿Í Á¤È®È÷ µ¿ÀÏÇÏ°Ô Ãâ·ÂµÈ´Ù.

- TestLoggin.java ÆÄÀÏÀ» ÄÄÆÄÀÏ ÇÏ°í ½ÇÇàÇßÀ» ¶§ ´ÙÀ½°ú À¯»çÇÑ Ãâ·ÂÀ» ¾ò°Ô µÉ °ÍÀÌ´Ù.

Start of main()
Just testing a log message with priority set to INFO
Just testing a log message with priority set to WARN
Just testing a log message with priority set to ERROR
Just testing a log message with priority set to FATAL
Calling init()
***System Environment As Seen By Java***
***Format: PROPERTY = VALUE***
java.runtime.name = Java(TM) 2 Runtime Environment, Standard Edition
sun.boot.library.path = c:jdk1.3jrebin
java.vm.version = 1.3.0_02
java.vm.vendor = Sun Microsystems Inc.
... and so on



- ¸¸¾à ¸Þ¼¼Áö ´ÙÀ½¿¡ priority ¸¦ Ãâ·ÂÇÏ°í ½Í´Ù¸é(´ç½ÅÀÌ ÁöÁ¤ÇÑ ¸Þ¼¼Áö¿¡)
´ÙÀ½ ¶óÀÎÀ» log4j.properties ÆÄÀÏ¿¡ Ãß°¡ÇÏ°í ÀúÀåÇÏ¸é µÈ´Ù.

log4j.appender.dest1.layout.ConversionPattern=%-5p: %m%n


±âº»°ªÀÎ %m %n À» ¿À¹ö¶óÀ̵å ÇÑ´Ù. %p ´Â ¸Þ¼¼ÁöÀÇ priority¸¦, %mÀº ¸Þ¼¼Áö ÀÚü¸¦,
%n Àº °³Ç๮ÀÚ¸¦ Ãâ·ÂÇÒ °ÍÀÌ´Ù.
´ç½ÅÀº ¾î¶² ÀÚ¹ÙÄڵ带 ¹Ù²ÜÇÊ¿äµµ ¾ø°í, TestLogging.java ÆÄÀÏÀ» ÀçÄÄÆÄÀÏ ÇÒ ÇÊ¿äµµ ¾øÀÌ
´ÜÁö properties ÆÄÀϸ¸ ¹Ù²Ù¸é µÈ´Ù.

DEBUG: Start of main()
INFO : Just testing a log message with priority set to INFO
WARN : Just testing a log message with priority set to WARN
ERROR: Just testing a log message with priority set to ERROR
FATAL: Just testing a log message with priority set to FATAL
DEBUG: Calling init()
INFO : ***System Environment As Seen By Java***
DEBUG: ***Format: PROPERTY = VALUE***
INFO : java.runtime.name = Java(TM) 2 Runtime Environment, Standard Edition
INFO : sun.boot.library.path = c:jdk1.3jrebin
INFO : java.vm.version = 1.3.0_02
INFO : java.vm.vendor = Sun Microsystems Inc.
... and so on


¸¸¾à DEBUG ³ª INFO ¸Þ¼¼Áö¿¡ Áú·Á¼­ À̰͵éÀÌ Ãâ·ÂµÇÁö ¾Ê±â¸¦ ¿øÇÏ°í, ´Ù¸¥ ¸Þ¼¼ÁöµéÀ» ¿©ÀüÈ÷ Ãâ·ÂµÇ±æ ¿øÇÑ´Ù¸é
(¿¹¸¦ µé¾î, ¾îÇø®ÄÉÀ̼ÇÀÌ »ý»êÀÌ ½ÃÀÛµÉ Áغñ°¡ µÇ¾úÀ» ¶§) log4j.rootCategory=DEBUF, dest1 ÇàÀ»
log4j.rootCategory=WARN, dest1 À¸·Î ¼öÁ¤ÇÏ¸é µÈ´Ù.

À§ÀÇ ÇàÀº WARN º¸´Ù priority°¡ ³·Àº µî±Þ(DEBUG¿Í INFO °°Àº)ÀÇ ¸Þ¼¼ÁöµéÀ» Á¦¿ÜÇÏ´Â °ÍÀÌ´Ù.
¼öÁ¤ÇÏ¸é ´ÙÀ½°ú °°ÀÌ Ãâ·ÂµÉ °ÍÀÌ´Ù.

WARN : Just testing a log message with priority set to WARN
ERROR: Just testing a log message with priority set to ERROR
FATAL: Just testing a log message with priority set to FATAL



                          Log4jÀÇ »ó¼¼


- Log4j¿¡´Â ¼¼°³ÀÇ ÁÖ¿äÇÑ ÄÄÆ÷³ÍÆ®°¡ ÀÖ´Ù. À̰͵éÀº Categories, appenders ±×¸®°í layouts ÀÌ´Ù.
- Category¸¦ ÃʱâÈ­ ½ÃÅ°°í ±× ÈÄ¿¡ ¿©·¯ ·Î±ë¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© ·Î±×ÆÄÀÏ·Î ¸Þ¼¼Áö¸¦ º¸³½´Ù.
- ÇϳªÀÇ Category´Â Çϳª ȤÀº ±× ÀÌ»óÀÇ ´ë»ó(¸ñÀûÁö)¿¡ ·Î±×Çϵµ·Ï ¼³Á¤µÈ´Ù.
Log4j ¿¡¼­´Â ÀÌ ´ë»óÀ» "appenders" ¶ó°í ºÎ¸¥´Ù. ¿Ö³ÄÇϸé ÀÌ Å¬·¡½ºµéÀº ±âº»ÀûÀ¸·Î ¸Þ¼¼Áö ¹®ÀÚ¿­À» ·Î±×ÀÇ ³¡¿¡
´õÇϱâ(append) ¶§¹®ÀÏ °ÍÀÌ´Ù.
Log4j ´Â ÇѹøÀÇ ·Î±ëÀ» È£ÃâÇÔÀ¸·Î ·Î±×¸Þ¼¼Áö¸¦ ÄܼÖ, ÅؽºÆ®ÆÄÀÏ, html ÆÄÀÏ, xml ÆÄÀÏ, ¼ÒÄÏÀ̳ª
½ÉÁö¾î´Â Windows NT Event Log µî ¸ðµç °ÍÀ¸·Î º¸³¾ ¼ö ÀÖ´Ù.
°Å±â´Ù ·Î±×¸Þ¼¼Áö¸¦ À̸ÞÀÏ·Î Àü¼ÛÇÒ ¼öµµ ÀÖ´Ù.(¿¹¸¦ µé¾î Ä¡¸íÀûÀÎ ¿¡·¯°¡ ³¯ °æ¿ì »ç¿ëÇϱâ Àû´çÇÏ´Ù)

- ¸î¸î appender Ŭ·¡½ºµéÀ» ³ª¿­ÇÏÀÚ¸é ConsoleAppender, FileAppender, SMTPAppender, SocketAppender,
NTEventLogAppender, SyslogAppender, JMSAppender, AsyncAppender and NullAppender °¡ ÀÖ´Ù.

- appender ´Â ½ÇÁ¦·Î ·Î±×¿¡ ¾²±â Àü¿¡ ¸Þ¼¼Áö Çü½ÄÀ» ¸¸µå´Â layout À» »ç¿ëÇÑ´Ù.
¿¹¸¦µé¾î HTMLLayout Àº ¸ðµç ¸Þ¼¼Áö¸¦ º¸±âÁÁÀº HTML Å×À̺í Çü½ÄÀ¸·Î ¸¸µé°ÍÀÌ´Ù.

-  Log4j´Â ³¯Â¥, ½Ã°£, ¸Þ¼¼Áö priority(DEBUG, WARN, FATAL µî), Java Ŭ·¡½º¸í,
¼Ò½ºÄÚµåÀÇ Çà¹øÈ£, ¸Þ¼Òµå¸í, Java ½º·¹µåÀÇ À̸§ µîµîÀ» ´ç½ÅÀÌ º¸³»´Â ·Î±×¸Þ¼¼Áö¿¡ ´õÇÒ ¼ö ÀÖ´Ù.
·Î±×ÇÏ´Â °ÍÀº appender ¿¡ ¼³Á¤µÈ layout ¿¡ ¸í½ÃµÈ´ë·ÎÀÌ´Ù.


- Category ´Â »ç¿ëÀÚ°¡ ÁöÁ¤ÇÏ¸ç ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏ´Â µµÆ®·Î ±¸ºÐµÈ ¹®ÀÚ¿­ÀÌ´Ù. ¿ÏÀüÇÑ À̸§ÀÇ Àڹ٠Ŭ·¡½º¸¦ ¾ò°í
±×°ÍÀ» Category À̸§À¸·Î ÁöÁ¤Çϱâ À§ÇØ º¸Åë Ŭ·¡½º¸í.class.getName() À» »ç¿ëÇÑ´Ù.
(°Ô´Ù°¡ runtime ½Ã¿¡ category ¸íÀ» ·Î±ëÇÏ´Â °ÍÀÌ class ¸íÀ» ·Î±ëÇÏ´Â °Íº¸´Ù ÈξÀ ´õ ºü¸£´Ù.
¸¸¾à ºü¸£¸é¼­µµ Ŭ·¡½º¸íÀ» ·Î±ëÇÏ°í ½Í´Ù¸é, class¸íÀ» categoryÀÇ À̸§À¸·Î ÁöÁ¤ÇÏ°í, Ä«Å×°í¸® À̸§À» ·Î±ëÇ϶ó!)

- category¸íÀÇ °¢°¢ÀÇ ´Ü¾î´Â ±× ´ÙÀ½ À̾îÁö´Â ´Ü¾îÀÇ ancestor(Á¶»ó)¶ó ÇÏ°í, ¹Ù·Î ´ÙÀ½ ´Ü¾îÀÇ parent(ºÎ¸ð)ÀÌ´Ù.
Log4j ´Â ƯÁ¤ category ¿¡¼­ ¿À¹ö¶óÀÌµå µÉ¶§±îÁö ancestor(Á¶»ó)À¸·ÎºÎÅÍ priority¿Í appender ¸¦
»ó¼ÓÇÏ´Â °³³äÀÌ Àֱ⠶§¹®¿¡, ÀÌ´Â ¸Å¿ì Áß¿äÇÏ´Ù.

- XML ¹®¼­ÀÇ root ¿Í °°ÀÌ log4j ¿¡´Â ¾ðÁ¦³ª À̸§ÀÌ ¾ø´Â root category °¡ Á¸ÀçÇÑ´Ù.
category ¸¦ ÃʱâÈ­Çϱâ À§ÇØ Category Ŭ·¡½ºÀÇ static ¸Þ¼Òµå¸¦ »ç¿ëÇÑ´Ù.

Category cat = Category.getRoot();
Category cat2 = Category.getInstance("your.category.name");


ƯÁ¤ category À̸§À» À§ÇØ Category.getInstance(...) ¸Þ¼Òµå´Â Ç×»ó Á¤È®È÷ µ¿ÀÏÇÑ Category °´Ã¼¸¦ ¸®ÅÏÇÑ´Ù.
µû¶ó¼­ Category ¸¦ ÃʱâÈ­Çؼ­ Â÷·Ê·Î µ¹¸± ÇÊ¿ä°¡ ¾ø´Ù. ´ë½Å
ÇÊ¿äÇÑ ¾î´À°÷À̵ç Category.getInstance("wanted.category.name"); À» ½áÁÖ¸é µÈ´Ù.

- "com.comp"¶ó´Â ÆÐÅ°ÁöÀÇ "TestApp" ¶ó´Â À̸§ÀÇ Å¬·¡½º·Î Category¸¦ ÀνºÅϽºÈ­ ÇÏ´Â ÀüÇüÀûÀÎ ¹æ¹ýÀº

static Category cat = Category.getInstance(TestApp.class.getName());


TestApp ´Â Ŭ·¡½ºÀ̸§ ÀÚüÀÌÁö ÀνºÅϽº°¡ ¾Æ´Ï¶ó´Â °ÍÀ» ¸í½ÉÇ϶ó. ¶ÇÇÑ TestApp.class ±¸¹®Àº TestApp Ŭ·¡½ºÀÇ
»õ·Î¿î ÀνºÅϽº¸¦ »ý¼ºÇÏÁö ¾Ê´Â´Ù.

- Priority Ŭ·¡½ºÀÇ ´Ù¼¸°³ priority(¿ì¼±±Ç) »ó¼ö´Â ¿ì¼±±ÇÀÌ °¨¼ÒÇÏ´Â Â÷·Ê·Î FATAL, ERROR, WRAN, INFO, DEBUG ÀÌ´Ù.
¿øÇÑ´Ù¸é (Priority Ŭ·¡½º¸¦) »ó¼Ó¹ÞÀ½À¸·Î½á ±× ÀÌ»óÀÇ priority¸¦ ¸¸µé ¼ö ÀÖ´Ù.

- category µé¿¡°Ô priority ¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖÁö¸¸ ²À ±×·² ÇÊ¿ä´Â ¾ø´Ù.
¸¸¾à priority ¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é log4j ´Â »ó¼Ó°ü°èÀÇ °èÃþ±¸Á¶¸¦ µû¶ó¼­ °¡Àå ¸ÕÀú ÇÒ´çµÈ °ÍÀ» ã¾Æ »ç¿ëÇÑ´Ù.
root category´Â Ç×»ó ÁöÁ¤µÈ priority°¡ ÀÖ´Ù.(±âº»°ªÀº Priority.DEBUG),
µû¶ó¼­ ¸ðµç category µéÀº Ç×»ó priority¸¦ °®µµ·Ï º¸ÀåµÇ¾î ÀÖ´Ù.

- Category Ŭ·¡½ºÀÇ logging ¸Þ¼ÒµåÀÇ »ç¿ë

// ÀϹÝÀûÀÎ ·Î±ë ¸Þ¼Òµå (ºÒÆíÇÔ)
public void log(Priority p, Object message);

// Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â ÀϹÝÀûÀÎ ·Î±ë ¸Þ¼Òµå
public void debug(Object message);
public void info(Object message);
public void warn(Object message);
public void error(Object message);
public void fatal(Object message);


- log4j´Â categoryÀÇ log(...) ¸Þ¼Òµå°¡ ÁöÁ¤ÇÑ priority°¡ category°¡ ÇÒ´çµÇ°Å³ª »ó¼Ó¹ÞÀº priority¿Í
°°°Å³ª ´õ ³ôÀ» ¶§¿¡¸¸ ·Î±ëÇÑ´Ù.

Category cat = Category.getRoot();
cat.setPriority(Priority.ERROR);
// Later...
//cat.info("Started processing..."); //Will not log
cat.error("User input is erroneous!"); //Will log
cat.fatal("Cannot process user input.  Program terminated!"); //Will log



                        Log4j ¼³Á¤


- ·Î±ëÀÌ °¡´ÉÇØÁö±â Àü¿¡, ù°·Î log4j ¸¦ ¼³Á¤ÇؾßÇÑ´Ù. Log4j ¸¦ ¼³Á¤ÇÑ´Ù´Â °ÍÀº category(loggers) µé¿¡
appender (¸ñÀûÁö/´ë»ó/Çڵ鷯)µéÀ» ´õÇÏ°í °¢°¢ÀÇ appender ¿¡°Ô layout(Àüü±¸¼º)À» ÁöÁ¤ÇÏ´Â °ÍÀÌ´Ù.

- category µéÀº ¾î¶² ¼ø¼­·Îµç »ý¼ºµÇ°í ¼³Á¤µÉ ¼ö ÀÖ´Ù. ƯÈ÷ category ´Â ±×°ÍÀÇ decendants(ÀÚ¼Õµé)À» ã¾Æ
¿¬°áÇÒ ¼ö ÀÖ°í, ½ÉÁö¾î ±×°Íµéº¸´Ù ³ªÁß¿¡ ÀνºÅϽºÈ­ µÉ ¼ö ÀÖ´Ù.

- ÀϹÝÀûÀ¸·Î Log4j ´Â ¾îÇø®ÄÉÀ̼ÇÀÌ ÃʱâÈ­µÇ´Â µ¿¾È º¸Åë ¼³Á¤ÆÄÀÏÀ» Àоîµé¿© Çѹø¸¸ ¼³Á¤µÈ´Ù.

- ¶ÇÇÑ category °´Ã¼ÀÇ addAppender() ¸Þ¼Òµå¸¦ »ç¿ëÇÔÀ¸·Î½á ƯÁ¤ appender ¿¡ ·Î±×Çϵµ·Ï ÇÁ·Î±×·¡¹ÖÀûÀ¸·Î
category¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¿øÇÏ´Â ¸¸Å­ ´õÇÒ ¼ö ÀÖ´Ù(¿øÇÏÁö ¾Ê´Â´Ù¸é ÇÏÁö ¾Ê¾Æµµ »ó°ü¾ø´Ù)
ÀÌ ¸Þ¼Òµå´Â º¸Åë ÃßõÇÏÁö ¾Ê´Â´Ù ¿Ö³Ä ÇÏ¸é ¼Ò½ºÆÄÀÏÀ» ¼öÁ¤ÇÏ¿© ´Ù½Ã ÄÄÆÄÀÏ ÇØ¾ß Çϱ⠶§¹®ÀÌ´Ù.
java ÇÁ·ÎÆÛƼ ÆÄÀÏÀ̳ª XML ÆÄÀÏ °°Àº ¿ÜºÎ ¼³Á¤ÆÄÀÏÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ ´õ ÁÁÀº ¹æ¹ýÀÌ´Ù.

- appender µéÀº singleton ÀÌ ¾Æ´Ï¶ó Ãß°¡µÈ´Ù´Â °ÍÀ» ÁÖÀÇÇ϶ó.
category ´Â ±âº»ÀûÀ¸·Î ±×°ÍÀÇ Á¶»ó¿¡¼­ ºÎÅÍÀÇ ¸ðµç appender µéÀ» ¹°·Á¹Þ´Â´Ù.
¸¸¾à appender ¸¦ category¿¡ ´õÇÏ°í ±×°ÍÀÇ ±â¹ÝÀÌ µÇ´Â µ¿ÀÏÇÑ ½ºÆ®¸²¿¡ ¾´´Ù¸é(ÄܼÖ, °°Àº ÆÄÀÏ µî)
°°Àº ·Î±×¸Þ¼¼Áö°¡ µÎ¹ø ÀÌ»ó ·Î±×µÉ °ÍÀÌ´Ù.
°Ô´Ù°¡ ¸¸¾à °èÃþ±¸Á¶ÀÇ µÎ°³ÀÇ category µéÀÌ °°Àº appender À̸§À» »ç¿ëÇÑ´Ù¸é,
Log4j ´Â ±× appender µé¿¡ µÎ¹ø ¾µ °ÍÀÌ´Ù.
appender ·ÎºÎÅÍ ¹°·Á¹Þ´Â °ÍÀ» ºÒ°¡´ÉÇÏ°Ô Çϱâ À§ÇØ categoryÀÇ cat.setAdditivity(false) ¸Þ¼Òµå¸¦ »ç¿ëÇ϶ó.
±×·¯¸é ·Î±× ¸Þ¼¼Áö´Â ÇØ´ç category¿¡ Ưº°È÷ ¼³Á¤µÈ appender ·Î¸¸ º¸³»Áú °ÍÀÌ´Ù.

- Á¤Àû ¸Þ¼ÒµåÀÎ BasicConfigurator.configure() ¸Þ¼Òµå´Â System.out.println(...) ±¸¹®ÀÌ ±×·¯Çϵí Äֿܼ¡ ·Î±ëÇÑ´Ù.
ÀÌ ¸Þ¼Òµå´Â ·çÆ® category ¿¡ ConsoleAppender ¸¦ ºÙ¿© Äֿܼ¡ ÇÁ¸°Æ® ÇÏ´Â ±â´ÉÀ» °¡Áö°í ÀÖ´Ù.
Ãâ·ÂÀº %-4r [%t] %-5p %c %x - %m%n À¸·Î ¼¼ÆÃµÈ PatternLayout À» »ç¿ëÇÏ¿© ±¸¼ºµÈ´Ù.
ÀÌ ¸Þ¼Òµå´Â log4j.properties ÆÄÀÏÀ» »ç¿ëÇÏ´Â °ÍÀÌ ´õ °£´ÜÇÏ°í À¯¿¬Çϱ⠶§¹®¿¡ ±×´ÙÁö ÇÊ¿äÇÏÁö ¾Ê´Ù.

- log4j ¸¦ ¼³Á¤ÇÏ´Â ±âº» ÆÄÀÏÀº log4j.properties ÀÌ´Ù.
ÀÌ ÆÄÀÏÀ» ¾îÇø®ÄÉÀ̼ÇÀÇ Å¬·¡½ºÆнº¿¡ ÁöÁ¤µÈ ¾î´À°÷À̵ç À§Ä¡½ÃŲ´Ù.

- Java ÇÁ·ÎÆÛƼ ÆÄÀÏ¿¡¼­ ¼³Á¤ Á¤º¸¸¦ Àоî¿À·Á¸é Á¤Àû¸Þ¼Òµå Áß ÇϳªÀÎ PropertyConfigurator.configure(...)
¸Þ¼Òµå¸¦ »ç¿ëÇ϶ó. ÀÌ¹Ì ¼³Á¤µÇ¾î ÀÖ´Â ¼³Á¤Àº Áö¿öÁöÁöµµ Àç¼³Á¤µÇÁöµµ ¾Ê´Â´Ù. ÀÌ ¸Þ¼Òµå¸¦ »ç¿ëÇÏ·Á¸é
Á¤Àû¸Þ¼ÒµåÀÎ BasicConfigurator.resetConfiguration() ¸Þ¼Òµå¸¦ ¸ÕÀú È£ÃâÇ϶ó. ÀÌ ¸Þ¼Òµå »ç¿ëÀº Äڵ带 ±æ°í
º¹ÀâÇÏ°Ô ÇÒ ¼öµµ ÀÖ´Ù. Ãʺ¸ÀÚ´Â °¢°¢ÀÇ ¾îÇø®ÄÉÀ̼ÇÀÇ ·çÆ®µð·ºÅ丮¿¡ log4j.properties ÆÄÀÏ Çϳª¸¸ À§Ä¡½ÃÄѶó.

- log4j ¿¹Á¦ ¼³Á¤ ÆÄÀÏ
# root categoryÀÇ priority ¸¦ to DEBUG ·Î ¼³Á¤ÇÏ°í appender ¸¦ A1 À¸·Î ÁöÁ¤ÇÑ´Ù.
log4j.rootCategory=DEBUG, A1

# A1 À» ConsoleAppender ·Î ÁöÁ¤(½Ã½ºÅÛ Äֿܼ¡ Ãâ·ÂÇÏ´Â).
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 À» PatternLayout À» »ç¿ëÇϵµ·Ï.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

ÀÌ ¿¹Á¦ ÆÄÀÏÀº BasicConfigurator.configure() ¸Þ¼Òµå¸¦ »ç¿ëÇÑ°Í°ú ¿ÏÀüÈ÷ °°ÀÌ log4j¸¦ ¼³Á¤ÇÑ´Ù. ±×·¯³ª À̹æ¹ýÀ¸·Î Çϸé
³ªÁß¿¡ ¼³Á¤À» ¼öÁ¤ÇÒ ¶§¿¡, ¿¹¸¦µé¾î DEBUG ¸¦ FATAL·Î ÇÁ·ÎÆÛƼ ÆÄÀÏÀ» °íÄ¡°í ¾î¶² ÀÚ¹ÙÆÄÀϵµ ÀçÄÄÆÄÀÏ ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.

- ´õ º¹ÀâÇÑ log4j ¼³Á¤ÆÄÀÏ

#### µÎ°³ÀÇ appender¸¦ »ç¿ëÇϸç, Çϳª´Â Äֿܼ¡ ·Î±ëÇÏ°í ´Ù¸¥ Çϳª´Â ÆÄÀÏ¿¡ ·Î±ëÇÑ´Ù.
log4j.rootCategory=debug, stdout, R

# priority°¡ WARN º¸´Ù °°°Å³ª ´õ ³ôÀº ¸Þ¼¼Áö¸¸ Ãâ·ÂÇÑ´Ù.
log4j.category.your.category.name=WARN
# Specifically inherit the priority level
#log4j.category.your.category.name=INHERITED

#### ù¹ø° appender´Â Äֿܼ¡ ¾´´Ù.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# È£ÃâÇÏ´Â ÆÄÀϸí°ú ¶óÀγѹö¸¦ Ãâ·ÂÇÏ´Â Pattern
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

#### µÎ¹ø° appender ´Â ÆÄÀÏ¿¡ ¾´´Ù.
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

# ÃÖ´ë·Î±×ÆÄÀÏ Å©±â¸¦ Á¶Àý
log4j.appender.R.MaxFileSize=100KB
# ÁýÀûÇÏ´Â ·Î±×ÆÄÀÏÀÇ ¼ö (¿©±â¼­´Â ÇϳªÀÇ ¹é¾÷ÆÄÀÏ)
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n


ÀÌÁ¦ Ãâ·ÂÀº example.log ¶ó´Â ÆÄÀÏ¿¡ µ¡ºÙ¿©Áú °ÍÀÌ°í, ÀÌ ÆÄÀÏÀº Å©±â°¡ 100KB °¡ µÉ¶§ ·Ñ¿À¹ö µÉ°ÍÀÌ´Ù.
·Ñ¿À¹ö°¡ ÀϾ ¶§ ±¸¹öÀüÀÇ example.log ÆÄÀÏÀº ÀÚµ¿À¸·Î example.log.1 ÆÄÀÏ·Î ¹Ù²ï´Ù.
DailyRollingFileAppender ¸¦ »ç¿ëÇÏ¿© ÆÄÀÏÀ» ¸ÅºÐ, ¸Å½Ã°£, ¸ÅÀÏ, ¸ÅÁÖ, ¸Å´Þ ¶Ç´Â ÇÏ·ç 2ȸ¾¿ ·Ñ¿À¹öµÇ°Ô ÇÒ ¼ö ÀÖ´Ù.


- ¼­¹ö °°ÀÌ ¿À·§µ¿¾È ½ÇÇàµÇ´Â ÇÁ·Î±×·¥¿¡¼­´Â Java ÇÁ·ÎÆÛƼ ÆÄÀÏÀ» ÀÌ¿ëÇÏ¿© ȯ°æ¼³Á¤À» Çϱâ À§ÇØ
configureAndWatch(String configFilename, long delay_in_milliseconds)¸¦ »ç¿ëÇÑ´Ù.
Log4j ´Â ¸î ¹Ð¸®¼¼ÄÁµå ¸¶´Ù ÇÁ·ÎÆÛƼ ÆÄÀÏÀÌ º¯ÇÏ´ÂÁö¸¦ °è¼Ó ¸ð´ÏÅ͸µ ÇÏ´Ù°¡
ÇÁ·ÎÆÛƼ ÆÄÀÏÀÌ º¯ÇÏ¸é ¼³Á¤À» ¾÷µ¥ÀÌÆ®ÇÒ°ÍÀÌ´Ù.

- ÇÁ·Î±×·¥ Ãâ½Ã´Ü°è°¡ µÇ¸é ºü¸¥ ¼º´ÉÀ» À§ÇØ °èÃþ±¸Á¶ÀÇ ¸ðµç category¿¡¼­ ƯÁ¤ priority ÀÌÇÏÀÇ ¸ðµç ¸Þ¼¼Áö¸¦
·Î±ëÇÏÁö ¾Êµµ·Ï ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ¾Æ¹«°Íµµ ·Î±ëÇÏÁö ¾ÊÀ¸·Á¸é, log.diable=FATAL À»
¼³Á¤ÆÄÀÏ(propertyÆÄÀÏ)¿¡ ¸í½ÃÇØÁÖ¸é µÈ´Ù.

´Ü log.disableOverride ÇÁ·ÎÆÛƼ°¡ false ·Î ¼¼ÆõǾî ÀÖÁö ¾Ê´Ù¸é ¿¹¿Ü°¡ ÀϾ´Ù.
µû¶ó¼­ ½Ã½ºÅÛ °ü¸®ÀÚ´Â log.disableÀ» ¿À¹ö¶óÀ̵å ÇÒ ¼ö ÀÖµµ·Ï ȯ°æ¼³Á¤ ÆÄÀÏ¿¡
log.disableOverride=true ¸¦ (ÀϽÃÀûÀ¸·Î)¸í½ÃÇÏ°í ¸ðµç ¸Þ¼¼Áö¸¦ ·Î±×Çؼ­ »ý±â´Â ¹®Á¦¸¦ Á¶»çÇغÁ¾ß ÇÑ´Ù.




                          À¯¿ëÇÑ Layout µé


- ¸î°¡Áö layout Ŭ·¡½ºµéÀ» µéÀÚ¸é TTCCLayout, HTMLLayout, PatternLayout, SimpleLayout ±×¸®°í XMLLayoutÀÌ ÀÖ´Ù.
- SimpleLayout °ú PatternLayout Ŭ·¡½ºµéÀº ÀÚ¹ÙÀÇ Throwable ¿¡·¯µé°ú ¿¹¿Ü¸¦ ¹«½ÃÇÑ´Ù.
HTMLLayout°ú XMLLAyout Àº ±×°ÍµéÀ» ´Ù·é´Ù.
- SimpleLayout Àº ·Î±× ±¸¹®ÀÇ property ¿¡ À̾î "-" À̳ª¿À°í ·Î±×¸Þ¼¼Áö°¡ ³ª¿À´Â ±¸¼ºÀÌ´Ù. ¿¹¸¦ µé¾î

DEBUG - Hello world

- PatternLayout Àº C¾ð¾îÀÇ printf ÇÔ¼ö¿Í À¯»çÇÑ º¯È¯ ÆÐÅÏ¿¡ µû¶ó Ãâ·ÂÀ» Çü½ÄÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù.
PatternLayout ÀÇ º¯È¯ Çü½ÄÀ» %r [%t] %-5p %c - %m%n ·Î ÇÏ¸é ´ÙÀ½°ú °°ÀÌ Ãâ·ÂµÈ´Ù.

176 [main] INFO  org.foo.Bar - Located nearest gas station

- °¡Àå ù Çʵå´Â ÇÁ·Î±×·¥ÀÌ ½ÃÀÛµÈ ÈķκÎÅÍ °æ°úµÈ ½Ã°£ÀÇ ¹Ð¸®¼¼ÄÁµå °ªÀÌ´Ù.
- µÎ¹ø° Çʵå´Â ·Î±× ¿äûÀ» ¸¸µç ½º·¹µåÀÌ´Ù.
- ¼¼¹ø° Çʵå´Â ·Î±× ±¸¹®ÀÇ priority ÀÌ´Ù.
- ³×¹ø° Çʵå´Â ·Î±×¿äû¿¡ °ü·ÃµÈ categoryÀÇ À̸§ÀÌ´Ù.
- "-" µÚÀÇ ¹®ÀÚ¿­Àº ·Î±ë¸Þ¼¼ÁöÀÌ´Ù.

- º¯È¯ Çü½Ä¿¡ ¾î¶² ¹®ÀÚµµ »ðÀ﵃ ¼ö ÀÖ´Ù.
- º¯È¯ ¹®ÀÚµéÀº ´ÙÀ½°ú °°´Ù.
- %m : ´ç½ÅÀÌ ÁöÁ¤ÇÑ ¸Þ¼¼Áö¸¦ Ãâ·Â
- %p : ·Î±ë À̺¥Æ®ÀÇ priority ¸¦ Ãâ·Â
- %r : ¾îÇø®ÄÉÀ̼ÇÀÌ ½ÃÀÛµÇ¾î ·Î±ëÀ̺¥Æ®°¡ ÀϾ¶§±îÁöÀÇ °æ°ú½Ã°£À» ¹Ð¸®¼¼ÄÁµå °ªÀ¸·Î Ãâ·Â
- %c : ·Î±ëÀ̺¥Æ®ÀÇ category¸¦ Ãâ·ÂÇÑ´Ù. ¿¹¸¦ µé¾î category À̸§ÀÌ "a.b.c" À϶§ %c{2} ´Â "b.c"¸¦ Ãâ·ÂÇϸç {2}´Â
   µµÆ®(.)·Î ±¸ºÐµÈ category À̸§ÀÇ ¸¶Áö¸· µÎ°³ÀÇ ÄÄÆ÷³ÍÆ®¸¦ ÀǹÌÇÑ´Ù.
   {n} ÀÌ ¾øÀ¸¸é ±âº»ÀûÀ¸·Î Ä«Å×°í¸®ÀÇ À̸§À» ¸ðµÎ Ãâ·ÂÇÑ´Ù.
- %t : ·Î±ë À̺¥Æ®¸¦ »ý¼ºÇÑ ½º·¹µå À̸§À» Ãâ·Â
- %x : ·Î±ëÀ̺¥Æ®¸¦ ¹ß»ý½ÃŲ ½º·¹µå¿¡ °ü·ÃµÈ ³»Æ÷°Ë»çÇ׸ñ(Nested Diagnostic Context : NDC)À» Ãâ·ÂÇÑ´Ù.
   Java Servlet °ú °°ÀÌ ´Ù¼öÀÇ Å¬¶óÀ̾ðÆ®°¡ ºÐ»êµÈ ½º·¹µå¿¡ ÀÇÇØ ´Ù·ç¾î Áú ¶§ À¯¿ëÇÏ´Ù.
- %n : Ç÷§Æû µ¶¸³ÀûÀÎ °³Ç๮ÀÚ¸¦ Ãâ·ÂÇÑ´Ù. "n" ¶Ç´Â "nr" µîÀÌ ÁöÁ¤µÉ ¼ö ÀÖ´Ù.
- %% : ÇϳªÀÇ % ±âÈ£¸¦ Ãâ·ÂÇÑ´Ù.
- °æ°í : ¾Æ·¡ÀÇ Çü½ÄÀº ÇÁ·Î±×·¥ÀÇ ½ÇÇà¼Óµµ¸¦ ´À¸®°Ô ÇÑ´Ù. ½ÇÇà¼Óµµ°¡ Áß¿äÇÏÁö ¾ÊÀº °ÍÀÌ ¾Æ´Ï¶ó¸é »ç¿ëÀ» ÇÇÇϵµ·Ï ÇÑ´Ù.
- %d : ·Î±ëÀ̺¥Æ®°¡ ÀϾ ³¯ÀÚ(date)À» Ãâ·ÂÇÑ´Ù.
   date º¯È¯ ÁöÁ¤ÀÚ´Â ³¯Â¥Çü½Ä ÁöÁ¤ÀÚ µÚ¿¡ ÀÌ¾î ³ª¿À´Â brace({..}) »çÀÌ¿¡ µÑ·¯½×¿© ³ª¿Â´Ù.
   ¿¹: %d{HH:mm:ss,SSS} ¶Ç´Â %d{dd MMM yyyy HH:mm:ss,SSS}
   ¸¸¾à ³¯ÀÚ Çü½Ä ÁöÁ¤ÀÚ°¡ ÁÖ¾îÁ®ÀÖÁö ¾Ê´Ù¸é ISO8601 Çü½ÄÀ¸·Î ³ªÅ¸³­´Ù. ³¯Â¥Çü½Ä ÁöÁ¤ÀÚ´Â ÀÚ¹ÙÀÇ ¼Óµµ°¡ ´À¸°
   SimpleDateFormat Ŭ·¡½ºÀÇ ½Ã°£Çü½Ä ¹®ÀÚ¿­°ú °°Àº ¹®¹ýÀ» ¼ö¿ëÇß´Ù.
   ´õ ºü¸¥ ¼º´ÉÀ» À§ÇØ %d{ISO8601}, %d{ABSOLUTE}, %{RELATIVE}(ÇÁ·Î±×·¥ ½ÃÀÛ ÈÄ °æ°ú½Ã°£ÀÇ ¹Ð¸®¼¼ÄÁµå°ªÀ» ³ªÅ¸³»¸ç
   °¡Àå ºü¸£´Ù) ¶Ç´Â %d{DATE} ¸¦ »ç¿ëÇÏ¸ç °¢°¢Àº
   log4jÀÇ ISO8601DateFormat, AbsoluteTimeDateFormat, RelativeTimeDateFormat, DateTimeDateFormat ³¯ÀÚÇü½ÄÀ» »ç¿ëÇÑ´Ù.

- %l : ¼Ò½ºÄÚµåÀÇ À§Ä¡Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù. %C. %M(%F:%L) ÀÇ Ãà¾àÇüÀÌ´Ù.
- %C : ·Î±ë¿äûÀ» ÀÏÀ¸Å² È£ÃâÀÚÀÇ ¿ÏÀüÇÑ Å¬·¡½ºÀ̸§À» Ãâ·ÂÇÑ´Ù.
   ¿¹¸¦µé¾î "org.apache.xyz.SomeClass"¶ó´Â Ŭ·¡½º À̸§ÀÌ ÀÖÀ»¶§, %C{1} Àº "SomeClass"¸¦ Ãâ·ÂÇÑ´Ù.
   {1} ´Â "¿ÏÀüÇÑ Å¬·¡½ºÀ̸§ÀÇ ¸¶Áö¸· ÇϳªÀÇ ±¸¼º¿ä¼Ò¸¦ Ãâ·ÂÇ϶ó" ´Â ¶æÀÌ´Ù. ¸¸¾à {n} ÀÌ ¾ø´Ù¸é
   ±âº»ÀûÀ¸·Î ¿ÏÀüÇÑ Å¬·¡½º À̸§À» Ãâ·ÂÇÑ´Ù.
- %M : ·Î±ë¿äûÀ» ÀÏÀ¸Å² ¸Þ¼Òµå¸¦ Ãâ·ÂÇÑ´Ù.
- %F : ·Î±ë¿äûÀ» ÀÏÀ¸Å² ÆÄÀÏ À̸§À» Ãâ·ÂÇÑ´Ù.
- %L : ·Î±ë¿äûÀ» ÀÏÀ¸Å² °÷ÀÇ Çà¹øÈ£¸¦ Ãâ·ÂÇÑ´Ù.


- ¼±ÅÃÀûÀ¸·Î ÆÛ¼¾Æ® ±âÈ£¿Í º¯È¯ ¹®ÀÚ »çÀÌ¿¡ Çü½Ä¼öÁ¤ÀÚ(format modifier)¸¦ »ç¿ëÇÏ¿© ÃÖ¼Ò Çʵå³ÐÀ̸¦ ¹Ù²Ù°í,
ÃÖ´ë ÇÊµå ³ÐÀÌ¿Í ÇÊµå ¾È¿¡¼­ÀÇ ¹®ÀÚÀÇ Á¤·ÄÀ» ¹Ù²Ü ¼ö ÀÖ´Ù.

- ÇÊµå ¾È¿¡¼­ ¿ÏÂÊ Á¤·ÄÀ» ÇϱâÀ§ÇØ ¸¶À̳ʽº ±âÈ£(-)¸¦ »ç¿ëÇÑ´Ù. ±âº»ÀûÀ¸·Î´Â ¿À¸¥ÂÊ Á¤·ÄÀÌ´Ù(¿ÞÂÊ¿¡ ¿©¹éÀ» µÒ)
- ÃÖ¼Ò ÇÊµå ³ÐÀ̸¦ ¸í½ÃÇϱâ À§ÇØ ¾çÀÇ Á¤¼ö¸¦ »ç¿ëÇÑ´Ù. ¸¸¾à µ¥ÀÌŸ Ç׸ñÀÌ ´õ ÀûÀº ¹®ÀÚ¸¦ °¡Áö°í ÀÖÀ¸¸é ÃÖ¼Ò³ÐÀÌ¿¡
µµ´ÞÇÒ ¶§±îÁö ¿À¸¥ÂÊ ¶ÈÀº ¿ÞÂÊ¿¡ °ø¹éÀÌ »ý±ä´Ù. ¸¸¾à µ¥ÀÌÅÍ Ç׸ñÀÇ ±æÀÌ°¡ ÃÖ¼Ò ÇʵåÆø º¸´Ù Å©¸é
Çʵå³ÐÀÌ°¡ µ¥ÀÌÅÍ¿¡ ¸Â°Ô È®ÀåµÈ´Ù.

- ¸¶Ä§Ç¥ µÚ¿¡ ³ª¿À´Â ¾çÀÇ Á¤¼ö´Â ÃÖ´ë ÇʵåÆøÀ» ÁöÁ¤ÇÑ´Ù. ¸¸¾à µ¥ÀÌÅÍÇ׸ñÀÌ ÃÖ´ëÇʵåÆøº¸´Ù ±æ¸é ³ª¸ÓÁö ¹®ÀÚµéÀº
µ¥ÀÌÅÍÇ׸ñÀÇ ³¡ÀÌ ¾Æ´Ï¶ó ½ÃÀÛ¿¡¼­ºÎÅÍ Áö¿öÁø´Ù.¿¹¸¦ µé¾î ÃÖ´ëÇʵåÆøÀÌ 8ÀÌ°í µ¥ÀÌÅÍ Ç׸ñÀÇ ±æÀÌ°¡ 10°³¹®ÀÚ¶ó¸é,
µ¥ÀÌÅÍ Ç׸ñ óÀ½ µÎ°³ÀÇ ¹®ÀÚ´Â Áö¿öÁø´Ù. ÀÌ·± µ¿ÀÛÀº ³¡¿¡¼­ºÎÅÍ À߶󳻴 C¾ð¾îÀÇ printf ÇÔ¼ö¿Í Â÷ÀÌ°¡ ³­´Ù.

- ¿¹ :
- %20c : ÃÖ¼Ò 20¹®ÀÚ °ø°£¿¡¼­ category À̸§À» (±âº»ÀûÀÎ)¿À¸¥ÂÊ Á¤·Ä
- %-20c : ÃÖ¼Ò 20¹®ÀÚ °ø°£¿¡¼­ category À̸§À» ¿ÞÂÊ Á¤·Ä
- %.30c : ¸¸¾à category À̸§ÀÌ 30¹®ÀÚº¸´Ù ±æ¸é (¾Õ¿¡¼­ºÎÅÍ)ÀÚ¸¥´Ù.
      ÃÖ¼ÒÆøÀÌ ¾øÀ¸¹Ç·Î 30¹®ÀÚº¸´Ù ª´Ù°í Çصµ ¿©¹é°ø°£Àº ¾ø´Ù.
- %20.30c : category À̸§ÀÌ 20¹®ÀÚº¸´Ù ªÀ¸¸é ¿À¸¥ÂÊ Á¤·ÄÀ» ÇÏ°í, 30ÀÚº¸´Ù ±æ¸é ½ÃÀÛºÎÅÍ ÀÚ¸¥´Ù.
- %-20.30c : category À̸§ÀÌ 20ÀÚº¸´Ù ªÀ¸¸é ¿ÞÂÊ Á¤·ÄÀ» ÇÏ°í, 30ÀÚº¸´Ù ±æ¸é ½ÃÀÛ¿¡¼­ºÎÅÍ ÀÚ¸¥´Ù.
- %r [%t] %-5p %c %x - %mn : ÀÌ Çü½ÄÀÌ º»·¡ TTCCLayout ÀÌ´Ù.
- %-6r [%15.15t] %-5p %30.30c %x - %mn : TTCCLayout°ú ´ÙÀ½ÀÇ Çü½ÄÀ» Á¦¿ÜÇÏ°í À¯»çÇÏ´Ù.
»ó´ë½Ã°£ÀÌ 6ÀÚ°¡ ¾ÈµÉ¶§¿¡ ¿À¸¥ÂÊ¿¡ ¿©¹éÀ» µÎ°í, ½º·¹µå¸íÀÌ 15ÀÚ°¡ ¾ÈµÉ¶§¿¡
¿À¸¥ÂÊ¿¡ ¿©¹éÀ» µÎ°í, ´õ ±æ¶§¿¡´Â ÀÚ¸£¸ç, category¸íÀÌ 30ÀÚ°¡ ¾ÈµÉ¶§´Â ¿À¸¥ÂÊ¿¡ ¿©¹éÀ» µÎ°í ´õ ±æ¶§´Â ÀÚ¸¥´Ù.

- °í±Þ : ´ÜÁö log·Î ¹®ÀÚ¿­¸¸À» ³Ñ±æ ÇÊ¿ä´Â ¾ø´Ù. °´Ã¼µµ ·Î±×¸Þ¼¼Áö¿¡ ³Ñ±æ ¼ö ÀÖ´Ù.
    ObjectRenderer ¸¦ implement ÇÏ¸é °´Ã¼¸¦ ¹®ÀÚ¿­·Î Ç¥½ÃÇÏ¿© appender ¿¡ ·Î±ëÇÑ´Ù.



            Log4j ¿¡¼­ Appender¿Í Layout ¿É¼ÇÀÇ Property keys

log4j ÀÇ Àüü ¿É¼Çµé

- log4j.configuration=app_config.properties : Category.getRoot() ³ª Category.getInstance(...) ¸Þ¼Òµå¸¦ óÀ½À¸·Î È£ÃâÇÏ¿©
Log4j ÀÇ ÃʱâÈ­ °úÁ¤À» ¸¶Ä£´Ù.("log4j.debug=true" ·Î ÁöÁ¤ÇÏ¿© ÃʱâÈ­°¡ ÀϾ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù)
ÃʱâÈ­µÇ´Â µ¿¾È Log4j ´Â ¾îÇø®ÄÉÀ̼ÇÀÇ Å¬·¡½ºÆнº¿¡¼­ "log4j.properties" ÆÄÀÏÀ̳ª
property key¸¦ ÅëÇØ ÁöÁ¤ÇÑ ÆÄÀÏÀ» ã´Â´Ù. ±×·¯³ª ÀÌ°Í(¼³Á¤ÆÄÀÏÀ» ÁöÁ¤Çϱâ À§ÇØ ¼³Á¤ÇÑ property key)À» ½Ã½ºÅÛ property·Î
¼³Á¤ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°ÀÌ ÇÁ·Î±×·¥À» ±¸µ¿ÇÑ´Ù.
java -Dlog4j.configuration=app_config.properties ...

¿Ö³ÄÇÏ¸é ¸¸¾à ¼³Á¤ÆÄÀÏ¿¡ ¼¼ÆÃÇß´Ù¸é ³Ê¹« ´Ê±â ¶§¹®ÀÌ´Ù.
Log4j ´Â ±âº» ¼³Á¤ÆÄÀÏÀÎ log4j.properties ÆÄÀÏÀ» Àбâ À§ÇØ ÀÌ¹Ì ½ÃÀÛÇßÀ» °ÍÀÌ´Ù.

- log4j.debug=true : ±âº»°ªÀº false. log4j ¸¦ ¼³Á¤ÇÏ´Â »ó¼¼ Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù.
- log4j.disable=INFO : ¸ðµç category¿¡¼­ ¿©±â ÁöÁ¤ÇÑ priority º¸´Ù °°°Å³ª ³·Àº priority ¸Þ¼¼Áö´Â ·Î±ëÇÏÁö ¾Ê´Â´Ù.
log4j.disableOverride ÇÁ·ÎÆÛƼ°¡ ±âº»°ªÀÎ false À϶§¿¡¸¸ µ¿ÀÛÇÑ´Ù.
- log4j.additivity.your.category.name=false : ±âº»°ªÀº true. appender¸¦ ancestor(Á¶»ó)À¸·ÎºÎÅÍ ½×ÀÌ°Ô ÇÒÁö(true)
±×·¸°Ô ÇÏÁö ¾ÊÀ»Áö(false)¸¦ ÁöÁ¤ÇÑ´Ù.
- log4j.defaultInitOverride=false : Category.getRoot() ³ª Category.getInstance(...) ¸Þ¼Òµå¸¦ óÀ½À¸·Î È£ÃâÇÏ¿©
Log4j ÀÇ ÃʱâÈ­ °úÁ¤À» ¸¶Ä£´Ù.("log4j.debug=true" ·Î ÁöÁ¤ÇÏ¿© ÃʱâÈ­°¡ ÀϾ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù)
ÃʱâÈ­µÇ´Â µ¿¾È Log4j ´Â ¾îÇø®ÄÉÀ̼ÇÀÇ Å¬·¡½ºÆнº¿¡¼­ "log4j.properties" ÆÄÀÏÀ̳ª
"log4j.configuration=app_config.properties" ÇÁ·ÎÆÛƼ¸¦ ÅëÇØ ÁöÁ¤ÇÑ ÆÄÀÏÀ» ã´Â´Ù.
¸¸¾à ÀÌ°Í(ÇÁ·ÎÆÛƼ¸¦ ÅëÇØ ÁöÁ¤ÇÑ È¯°æÆÄÀÏÀ» ã´Â °Í)À» ¿øÇÏÁö ¾Ê´Â´Ù¸é ÀÌ ÇÁ·ÎÆÛƼ¸¦ true ·Î ¼¼ÆÃÇ϶ó.
±×·¯³ª ÀÌ°ÍÀ» ½Ã½ºÅÛ property·Î ¼³Á¤ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°ÀÌ ÇÁ·Î±×·¥À» ±¸µ¿ÇÑ´Ù.
java -Dlog4j.defaultInitOverride=true ...
¿Ö³ÄÇÏ¸é ¼³Á¤ÆÄÀÏ¿¡ ¼¼ÆÃÇß´Ù¸é ÀÌ¹Ì ³Ê¹« ´Ê±â ¶§¹®ÀÌ´Ù.Log4j´Â ÀÌ¹Ì ±× ÆÄÀÏÀ» ÀбâÀ§ÇØ ½ÃÀ۵ǾúÀ» °ÍÀÌ´Ù.
- log4j.disableOverride=false: ±âº»°ªÀº false. °¡²û true·Î ¼³Á¤ÇÏ¿© log.disable ÇÁ·ÎÆÛƼ¸¦ ¹«½ÃÇÒ ¼ö ÀÖ´Ù.


ConsoleAppender ¿É¼Çµé
- Threadhold=WARN: ÀÌ appender´Â categoryÀÇ priority°¡ ´õ ³·°Ô ÁöÁ¤µÇ¾î ÀÖ´Ù°í ÇÒÁö¶óµµ ¿©±â ¸í½ÃµÈ priorityº¸´Ù
³·Àº¸Þ¼¼ÁöµéÀ» ·Î±ëÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ°ÍÀº Äֿܼ¡ ¸ðµç ¸Þ¼¼Áö°¡ ³ªÅ¸³ª´Â µ¿¾È ÆÄÀÏ¿¡ ·Î±ëµÇ´Â °æ¿ì¿Í °°ÀÌ
¸Þ¼¼ÁöÀÇ ¼ýÀÚ¸¦ ÁÙÀ̴µ¥ À¯¿ëÇÏ´Ù.
- ImmediateFlush=true: ±âº»°ªÀº true. ·Î±×¸Þ¼¼ÁöµéÀÌ ÀüÇô ¹öÆÛµÇÁö ¾Ê´Â °ÍÀ» ÀǹÌÇÏ¸ç ´ëºÎºÐÀÇ »óȲ¿¡ Àû´çÇÏ´Ù.
- Target=System.err: ±âº»°ªÀº System.out


FileAppender ¿É¼Çµé
- Threadhold=WARN: ÀÌ appender´Â categoryÀÇ priority°¡ ´õ ³·°Ô ÁöÁ¤µÇ¾î ÀÖ´Ù°í ÇÒÁö¶óµµ ¿©±â ¸í½ÃµÈ priorityº¸´Ù
³·Àº¸Þ¼¼ÁöµéÀ» ·Î±ëÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ°ÍÀº Äֿܼ¡ ¸ðµç ¸Þ¼¼Áö°¡ ³ªÅ¸³ª´Â µ¿¾È ÆÄÀÏ¿¡ ·Î±ëµÇ´Â °æ¿ì¿Í °°ÀÌ
¸Þ¼¼ÁöÀÇ ¼ýÀÚ¸¦ ÁÙÀ̴µ¥ À¯¿ëÇÏ´Ù.
- ImmediateFlush=true: ±âº»°ªÀº true. ·Î±×¸Þ¼¼ÁöµéÀÌ ÀüÇô ¹öÆÛµÇÁö ¾Ê´Â °ÍÀ» ÀǹÌÇÏ¸ç ´ëºÎºÐÀÇ »óȲ¿¡ Àû´çÇÏ´Ù.
- File=mylog.txt : ·Î±ëÇÒ ÆÄÀϸí. ¾ÕºÎºÐ¿¡ °æ·Î¸¦ ³ªÅ¸³»±â À§ÇØ ${some_property_key}
(¿¹¸¦ µé¾î java.home ¶Ç´Â user.home °ú °°Àº ½Ã½ºÅÛ ÇÁ·ÎÆÛƼ)¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. »ç½Ç ¸ðµç ¿É¼ÇµéÀÇ ÇÁ·ÎÆÛƼ۵éÀº
ÀÌ·± Á¾·ùÀÇ °ªÀ» ¼³Á¤ °¡´ÉÇÏ´Ù.
- Append=false : ±âº»°ªÀº trueÀ̸ç ÆÄÀÏ ³¡¿¡ Ãß°¡ÇÏ´Â °ÍÀ» ÀǹÌÇÑ´Ù.
false ´Â °¢°¢ÀÇ ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ¶§ ÆÄÀÏ¿¡ µ¤¾î¾º¿î´Ù.


RollingFileAppender ¿É¼Çµé
- Threadhold=WARN: ÀÌ appender´Â categoryÀÇ priority°¡ ´õ ³·°Ô ÁöÁ¤µÇ¾î ÀÖ´Ù°í ÇÒÁö¶óµµ ¿©±â ¸í½ÃµÈ priorityº¸´Ù
³·Àº¸Þ¼¼ÁöµéÀ» ·Î±ëÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ°ÍÀº Äֿܼ¡ ¸ðµç ¸Þ¼¼Áö°¡ ³ªÅ¸³ª´Â µ¿¾È ÆÄÀÏ¿¡ ·Î±ëµÇ´Â °æ¿ì¿Í °°ÀÌ
¸Þ¼¼ÁöÀÇ ¼ýÀÚ¸¦ ÁÙÀ̴µ¥ À¯¿ëÇÏ´Ù.
- ImmediateFlush=true: ±âº»°ªÀº true. ·Î±×¸Þ¼¼ÁöµéÀÌ ÀüÇô ¹öÆÛµÇÁö ¾Ê´Â °ÍÀ» ÀǹÌÇÏ¸ç ´ëºÎºÐÀÇ »óȲ¿¡ Àû´çÇÏ´Ù.
- File=mylog.txt : ·Î±ëÇÒ ÆÄÀϸí. ¾ÕºÎºÐ¿¡ °æ·Î¸¦ ³ªÅ¸³»±â À§ÇØ ${some_property_key}
(¿¹¸¦ µé¾î java.home ¶Ç´Â user.home °ú °°Àº ½Ã½ºÅÛ ÇÁ·ÎÆÛƼ)¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. »ç½Ç ¸ðµç ¿É¼ÇµéÀÇ ÇÁ·ÎÆÛƼ۵éÀº
ÀÌ·± Á¾·ùÀÇ °ªÀ» ¼³Á¤ °¡´ÉÇÏ´Ù.
- Append=false : ±âº»°ªÀº trueÀ̸ç ÆÄÀÏ ³¡¿¡ Ãß°¡ÇÏ´Â °ÍÀ» ÀǹÌÇÑ´Ù.
false ´Â °¢°¢ÀÇ ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ¶§ ÆÄÀÏ¿¡ µ¤¾î¾º¿î´Ù.
- MaxFileSize=100KB : ³¡¿¡ KB, MB ¶Ç´Â GB¸¦ ºÙÀδÙ. ÁöÁ¤ÇÑ Å©±â¿¡ µµ´ÞÇÏ¸é ·Î±×ÆÄÀÏÀ» ±³Ã¼ÇÑ´Ù(roll).
- MaxBackupIndex=2 : ÃÖ´ë 2°³(¿¹)ÀÇ ¹é¾÷ ÆÄÀϵéÀ» À¯Áö½ÃŲ´Ù. ¿À·¡µÈ ÆÄÀϵéÀº »èÁ¦ÇÑ´Ù. 0 Àº ¹é¾÷ÆÄÀÏÀ» ¸¸µéÁö ¾Ê´Â´Ù.


DailyRollingFileAppender ¿É¼Çµé
- Threadhold=WARN: ÀÌ appender´Â categoryÀÇ priority°¡ ´õ ³·°Ô ÁöÁ¤µÇ¾î ÀÖ´Ù°í ÇÒÁö¶óµµ ¿©±â ¸í½ÃµÈ priorityº¸´Ù
³·Àº¸Þ¼¼ÁöµéÀ» ·Î±ëÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ°ÍÀº Äֿܼ¡ ¸ðµç ¸Þ¼¼Áö°¡ ³ªÅ¸³ª´Â µ¿¾È ÆÄÀÏ¿¡ ·Î±ëµÇ´Â °æ¿ì¿Í °°ÀÌ
¸Þ¼¼ÁöÀÇ ¼ýÀÚ¸¦ ÁÙÀ̴µ¥ À¯¿ëÇÏ´Ù.
- ImmediateFlush=true: ±âº»°ªÀº true. ·Î±×¸Þ¼¼ÁöµéÀÌ ÀüÇô ¹öÆÛµÇÁö ¾Ê´Â °ÍÀ» ÀǹÌÇÏ¸ç ´ëºÎºÐÀÇ »óȲ¿¡ Àû´çÇÏ´Ù.
- File=mylog.txt : ·Î±ëÇÒ ÆÄÀϸí. ¾ÕºÎºÐ¿¡ °æ·Î¸¦ ³ªÅ¸³»±â À§ÇØ ${some_property_key}
(¿¹¸¦ µé¾î java.home ¶Ç´Â user.home °ú °°Àº ½Ã½ºÅÛ ÇÁ·ÎÆÛƼ)¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. »ç½Ç ¸ðµç ¿É¼ÇµéÀÇ ÇÁ·ÎÆÛƼ۵éÀº
ÀÌ·± Á¾·ùÀÇ °ªÀ» ¼³Á¤ °¡´ÉÇÏ´Ù.
- Append=false : ±âº»°ªÀº trueÀ̸ç ÆÄÀÏ ³¡¿¡ Ãß°¡ÇÏ´Â °ÍÀ» ÀǹÌÇÑ´Ù.
false ´Â °¢°¢ÀÇ ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ¶§ ÆÄÀÏ¿¡ µ¤¾î¾º¿î´Ù.
- DatePattern='.'yyyy-ww : ¸ÅÁÖ¸¶´Ù ÆÄÀÏÀ» ±³Ã¼(roll)ÇÑ´Ù. ±³Ã¼Áֱ⸦ ¿ù, ÁÖ, ÀÏ, ÇÏ·ç 2ȸ, ½Ã°£, ºÐ º°·Î Á¤ÇÒ¼ö ÀÖ´Ù.
ÀÌ °ªÀº ±³Ã¼Áֱ⸦ ¼³Á¤ÇÒ »Ó¸¸ ¾Æ´Ï¶ó ¹é¾÷ÆÄÀÏÀÇ ºÙ´Â ¹®ÀÚ¿­µµ Á¤ÇÑ´Ù. ÄÝ·Ð(:) ¹®ÀÚ¸¦ °ªÀÇ ¾îµð¿¡µµ »ç¿ëÇÏÁö ¸»¶ó.
±×°Í ¸»°í´Â ÀÚ¹ÙÀÇ SimpleDateFormat ÀÇ ¾î¶² Çü½Ä ¹®ÀÚ¿­À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ƯÈ÷ ÇѽÖÀÇ ÀÛÀºµû¿ÈÇ¥(single quote) ¾È¿¡ ÀÖ´Â ¹®ÀÚ¸¦ ¹Ýµå½Ã Á¦¾îÇØÁÖ¾î¾ß ÇÑ´Ù.(¿¹ÀÇ '.' ¿Í °°ÀÌ)
- '.'yyyy-MM: ¸Å´ÞÀÇ Ã¹³¯¿¡ ·Î±×ÆÄÀÏÀ» ±³Ã¼ÇÑ´Ù.
- '.'yyyy-ww: ¸ÅÁÖÀÇ Ã¹³¯¿¡ ·Î±×ÆÄÀÏÀ» ±³Ã¼ÇÑ´Ù.
- '.'yyyy-MM-dd: ¸ÅÀÏ ÀÚÁ¤¿¡ ·Î±×ÆÄÀÏÀ» ±³Ã¼ÇÑ´Ù.
- '.'yyyy-MM-dd-a: ¸ÅÀÏ ÀÚÁ¤°ú Á¤¿À¿¡ ·Î±×ÆÄÀÏÀ» ±³Ã¼ÇÑ´Ù.
- '.'yyyy-MM-dd-HH: ½Ã°£¸¶´Ù(½Ã°£ÀÌ ½ÃÀÛÇÒ¶§) ·Î±×ÆÄÀÏÀ» ±³Ã¼ÇÑ´Ù.
- '.'yyyy-MM-dd-HH-mm: ºÐ¸¶´Ù(ºÐÀÌ ½ÃÀÛÇÒ¶§) ·Î±×ÆÄÀÏÀ» ±³Ã¼ÇÑ´Ù.


PatternLayout ¿É¼Çµé
- ConversionPattern=%m%n : °¢°¢ÀÇ ·Î±×¸Þ¼¼ÁöÀÇ Çü½ÄÀ» ³ªÅ¸³»´Â ¹æ¹ý(Æ÷ÇÔÇÏ´Â Á¤º¸)


HTMLLayout ¿É¼Çµé
- LocatoinInfo=true: ±âº»°ªÀº false. ÀÚ¹ÙÆÄÀϸí°ú Çà¹øÈ£¸¦ Ãâ·ÂÇÑ´Ù.
- Title=My app title : ±âº»°ªÀº Log4j Log Message. HTMLÀÇ <title>ű׿¡ ÁÖ¾îÁø´Ù


XMLLayout ¿É¼Çµé
- LocatoinInfo=true: ±âº»°ªÀº false. ÀÚ¹ÙÆÄÀϸí°ú Çà¹øÈ£¸¦ Ãâ·ÂÇÑ´Ù.


TTCCLayout ¿É¼Çµé(ÀÌ°Í ´ë½Å ´õ À¯¿¬ÇÑ PatternLayoutÀ» »ç¿ëÇ϶ó)
- DateFormat=ISO8601: ÀÚ¹ÙÀÇ SimpleDateFormat ÀÇ »ý¼ºÀÚÀ̰ųª NULL, RELATIVE, ABSOLUTE, DATE, ISO8601 Áß Çϳª.
- TimeZoneID=GMT-8:00: TimeZone.getTimeZone(java.lang.String) ¸Þ¼Òµå¿¡ ÀÇÇØ ³ª¿Ã¸¸ÇÑ Çü½ÄÀÇ ¹®ÀÚ¿­
- CategoryPrefixing=false: ±âº»°ªÀº true. category À̸§À» Ãâ·ÂÇÑ´Ù.
- ContextPrinting=false: ±âº»°ªÀº true. ÇöÀç ½º·¹µå¿¡ ¼ÓÇÏ´Â ³»Æ÷°Ë»çÇ׸ñ Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù.
- ThreadPrinting=false: ±âº»°ªÀº true. ½º·¹µå¸íÀ» Ãâ·ÂÇÑ´Ù.





                       Á¾ÇÕÀûÀÎ Log4j ¼³Á¤ ÇÁ·ÎÆÛƼ ÆÄÀÏ

#log4j.debug=true
#log4j.disable=fatal
#log4j.additivity.TestLogging=false

log4j.rootCategory=, dest1
log4j.category.TestLogging=DEBUG, dest1
log4j.appender.dest1=org.apache.log4j.ConsoleAppender
#log4j.appender.dest1.layout=org.apache.log4j.SimpleLayout
log4j.appender.dest1.layout=org.apache.log4j.PatternLayout
#log4j.appender.dest1.layout.ConversionPattern=%-5p %l %x: %m%n


!----------------------####### END OF PROPERTIES #######----------------------!


###############################################################################
# ¹ØÀ¸·Î log4j ¼³Á¤ÆÄÀÏÀ» ¾î¶»°Ô ½á¾ßÇÏ´ÂÁö ´õ ÀÚ¼¼È÷ ±â·ÏÇسõ¾Ò´Ù.           #
# #À¸·Î ½ÃÀÛÇÏ´Â ÇàÀ» ¼±ÅÃÀûÀ¸·Î º¹»çÇؼ­ ÁÖ¼®À» Á¦°ÅÇÏ°í ºÙ¿©¶ó.             #
###############################################################################

!-----------------------------------------------------------------------------!
! ÀÌ ÆÄÀÏÀ» Ŭ·¡½ºÆнº°¡ ÁöÁ¤µÈ ¾î´À°÷À̵ç À§Ä¡½ÃÄѶó.                                        !
! Appender µéÀº ±âº»ÀûÀ¸·Î Ãß°¡µÈ´Ù.                                                                !
! ÇÁ·ÎÆÛƼµéÀº category°¡ ¿À¹ö¶óÀÌµå µÉ¶§±îÁö »ó¼ÓµÈ´Ù.                                      !
! ${property_key} ¿¡¼­ Å°ÀÇ °ªÀº ½Ã½ºÅÛ ÇÁ·ÎÆÛƼ³ª ÆÄÀÏ ÀÚü¿¡¼­ Á¤ÀÇµÉ ¼ö            !
! ÀÖ´Ù. ½Ã½ºÅÛ ÇÁ·ÎÆÛƼµéÀº ÀÌ ÆÄÀϺ¸´Ù ¸ÕÀú °Ë»öµÈ´Ù.                                         !
!-----------------------------------------------------------------------------!


!-----------------------------------------------------------------------------!
! log4jÀÇ »óÀ§ ¼öÁØ¿¡¼­ÀÇ µ¿ÀÛÀ» ¼³Á¤ÇÑ´Ù.                                                          !
!-----------------------------------------------------------------------------!
! log4j°¡ ÀÌÆÄÀÏÀ» ÆĽÌÇÏ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù.
#log4j.debug=true
! ÀÌ°ÍÀ» false·Î ÁöÁ¤ÇÏ¸é ½ÇÁ¦ÀûÀ¸·Î log4j.disable ÇÁ·ÎÆÛƼ¸¦ µû¸£°ÔµÈ´Ù.
#log4j.disableOverride=false
! ÁÖ¾îÁø priority º¸´Ù °°°Å³ª ³·Àº priority ¸¦ °¡Áø ¸Þ¼¼ÁöÀÇ ·Î±ëÀ»
! ¸ðµç category¿¡¼­ ºÒ°¡´É ÇÏ°Ô ÇÑ´Ù.
#log4j.disable=INFO



!-----------------------------------------------------------------------------!
! category(logger) ¼³Á¤                                                                                    !
!-----------------------------------------------------------------------------!

! ROOT CATEGORY (º¸Åë À̰͸¸ ¼¼ÆÃÇÏ´Â °ÍÀ¸·Î ÃæºÐÇÏ´Ù)
! ¿©±â¼­´Â priority°¡ DEBUG(±âº»°ª) ÀÌ»óµÇ´Â ¸Þ¼¼Áö¸¦ ·Î±ëÇÑ´Ù.
#log4j.rootCategory=, dest1
! ¶Ç´Â,
#log4j.rootCategory=debug, dest1, dest2

! ´ç½ÅÀÌ ¼³Á¤ÇÏ´Â CATEGORYµé
! (Ŭ·¡½º/ÆÐÅ°Áö/ÇÁ·ÎÁ§Æ®/±âŸ º°·Î ·Î±ëÀ» »ç¿ëÀÚ¼³Á¤ÇÑ´Ù)
! Á¶»óÀÇ priority¸¦ ¿À¹ö¶óÀ̵å ÇÏ°í, ÀÌ Ä«Å×°í¸®¿¡¼­ WARN ¶Ç´Â ±×º¸´Ù ³ô°Ô¼³Á¤
#log4j.category.TestLogging=WARN, dest3
! ¶Ç´Â,
#log4j.category.TestLogging=DEBUG, dest3

!--------´ÙÀ½À» ÇÏÁö¸¶¶ó!!  APPENDERµéÀº ±âº»ÀûÀ¸·Î Ãß°¡µÈ´Ù!!!----------------!
! °°Àº ·Î±× ¸Þ¼¼ÁöµéÀ» dest1¿¡ µÎ¹ø ÀÌ»ó ¾µ°ÍÀÌ´Ù. ÇѹøÀº root,                            !
! ±×¸®°í´Â ÀÌ category ·Î                                                                                 !
!#log4j.category.TestLogging=DEBUG, dest1, dest3                                             !
! ¸¸¾à ÀÌ category¿¡¼­ Ãß°¡(additive)µÇ±â¸¦ ¿øÇÏÁö ¾ÊÀ¸·Á¸é ´ÙÀ½°ú °°ÀÌ Ç϶󠠠      !
!#log4j.additivity.TestLogging=false                                                                   !
!-----------------------------------------------------------------------------!


!-----------------------------------------------------------------------------!
! appender(log destinations/targets) ¿Í ¿É¼ÇµéÀ» ¼³Á¤                                         !
!-----------------------------------------------------------------------------!

! CONSOLE¿¡ ¾²±â (stdout ¶Ç´Â stderr)
#log4j.appender.dest1=org.apache.log4j.ConsoleAppender
#log4j.appender.dest1.ImmediateFlush=true

! FILE¿¡ ·Î±× ¾²±â, ÁöÁ¤ÇÑ Å©±â¸¦ ³Ñ¾î¼­¸é ÆÄÀÏÀ» ±³Ã¼
#log4j.appender.dest2=org.apache.log4j.RollingFileAppender
! ÀÌ appender ´Â ¿©±â ¸í½ÃµÈ priority ¿Í °°°Å³ª ³ôÀº ¸Þ¼¼Áö¸¸ ·Î±ëÇÑ´Ù.
#log4j.appender.dest2.Threshold=ERROR
!  ÆÄÀϸíÀ» ¸í½ÃÇÑ´Ù (${property_key} ´Â ´ë½Å »ç¿ë°¡´ÉÇÑ °ªÀ» ¾ò¾î¿Â´Ù)
#log4j.appender.dest2.File=${java.home}/log4j.log
! Ãß°¡ÇÏÁö ¾Ê°í, µ¤¾î¾º¿î´Ù.
#log4j.appender.dest2.Append=false
! ÃÖ´ë ÆÄÀÏÅ©±â¸¦ Á¶Àý
#log4j.appender.dest2.MaxFileSize=100KB
! ¹é¾÷ÆÄÀÏ °¹¼ö ÁöÁ¤ (¹é¾÷ ÆÄÀÏÀº ÆÄÀÏÀ̸§.1, .2 µîÀ¸·Î »ý¼ºµÈ´Ù)
#log4j.appender.dest2.MaxBackupIndex=2

! ÆÄÀÏ¿¡ ·Î±×¸¦ ¾²°í, ¸ÅÁÖ ±³Ã¼µÈ´Ù.
#log4j.appender.dest3=org.apache.log4j.DailyRollingFileAppender
! ÆÄÀϸíÀ» ¸í½Ã.
#log4j.appender.dest3.File=log4TestLogging2.html
! ÃÖ´ë ÆÄÀÏÅ©±â¸¦ Á¶Àý
#log4j.appender.dest3.MaxFileSize=300KB
! °¢ ÁÖ¸¦ ½ÃÀÛÇÏ¸ç ·Î±×ÆÄÀÏÀ» ±³Ã¼
#log4j.appender.dest3.DatePattern='.'yyyy-ww



!-----------------------------------------------------------------------------!
! appenderÀÇ layout(log Çü½Ä, ±¸¼º) °ú ¿É¼ÇµéÀ» ¼³Á¤                                           !
!-----------------------------------------------------------------------------!

! °£´ÜÇÑ ·Î±× Çü½ÄÀ» »ç¿ë (¿¹ INFO - your log message)
#log4j.appender.dest1.layout=org.apache.log4j.SimpleLayout

! ·Î±× ¸Þ¼¼Áö ±¸¼ºÀ» CÀÇ printf ½ºÅ¸ÀÏÀÇ Çü½ÄÀ» »ç¿ë
#log4j.appender.dest1.layout=org.apache.log4j.PatternLayout
! pattern layout ¿¡¼­ ÆÐÅÏÀ» ÁöÁ¤ (±âº»°ªÀº %m%n ÀÌ¸ç °¡Àå ºü¸£´Ù)
#log4j.appender.dest1.layout.ConversionPattern=%-5p: %m%n
! ¶Ç´Â,
#log4j.appender.dest1.layout.ConversionPattern=%-5p %6.10r[%t]%x(%F:%L) - %m%n

#log4j.appender.dest2.layout=org.apache.log4j.PatternLayout
#log4j.appender.dest2.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x(%F:%L) - %m%n
! ¶Ç´Â, (¾Æ·¡ÀÇ Çü½ÄÀº ¾îÇø®ÄÉÀ̼ÇÀ» ´À¸®°Ô ÇÒ °ÍÀÌ´Ù)
#log4j.appender.dest2.layout.ConversionPattern=[%d{yyyy-mm-dd hh:mm},%6.6r]%-5p[%t]%x(%F:%L) - %m%n


! HTML Å×À̺í ÇüÅ·Π·Î±×¸Þ¼¼Áö¸¦ ±¸¼º
#log4j.appender.dest3.layout=org.apache.log4j.HTMLLayout
! ÀÚ¹Ù file¸í°ú Çà¹øÈ£¸¦ Ãâ·Â (±âº»°ªÀº false)
#log4j.appender.dest3.layout.LocationInfo=true
! <title>ÅÂ±× ¼³Á¤ (±âº»°ª: Log4J Log Messages)
#log4j.appender.dest3.layout.Title=My App Log


!-----------------------------------------------------------------------------!
!                          PATTERN Çü½Ä ¿ë¾îµé                                                           !
!-----------------------------------------------------------------------------!
! %n - °³Çà                                                                                                     !
! %m - ·Î±× ¸Þ¼¼Áö                                                                                          !
! %p - ¸Þ¼¼Áö priority (FATAL, ERROR, WARN, INFO, DEBUG ¶Ç´Â »ç¿ëÀÚÁ¤ÀÇ)        !
! %r - ÇÁ·Î±×·¥ ±¸µ¿ÀÌ ½ÃÀÛÇÑ ÀÌÈÄ °æ°ú½Ã°£ÀÇ ¹Ð¸®¼¼ÄÁµå°ª                                  !
! %% - ÆÛ¼¾Æ® ±âÈ£ Ãâ·Â                                                                                   !
!                                                                                                                    !
!----------------------- ·Î±×¿¡¼­ÀÇ ¸î°¡Áö Ãß°¡¿ä¼Òµé--------------------------!
! %c - category(logger)À̸§, %c{2}´Â ¸¶Áö¸· µÎ°³ÀÇ ¿ä¼Ò¸¦ Ãâ·ÂÇÑ´Ù.           !
! %t - ÇöÀç ½º·¹µå À̸§                                                       !
! %x - ³»Æ÷°Ë»çÇ׸ñ (NDC)                                                   !
!                                                                             !
!------------------------- ¼º´É ÀúÇϽÃÅ°´Â Çü½Äµé ----------------------------!
! %d - ³¯ÀÚ¿Í ½Ã°£, ¶ÇÇÑ %d{ISO8601}, %d{DATE}, %d{ABSOLUTE},                 !
!        %d{HH:mm:ss,SSS}, %d{dd MMM yyyy HH:mm:ss,SSS} µî                    !
! %l - %F%L%C%M ÀÇ Ãà¾àÇü                                                     !
! %F - ÀÚ¹Ù ¼Ò½º ÆÄÀÏ¸í                                                       !
! %L - ÀÚ¹Ù ¼Ò½ºÀÇ Çà¹øÈ£                                                     !
! %C - Àڹ٠Ŭ·¡½º À̸§, %C{1} ¸¶Áö¸· ÇϳªÀÇ ¿ä¼Ò¸¦ Ãâ·Â                      !
! %M - ÀÚ¹Ù ¸Þ¼Òµå À̸§                                                       !
!                                                                             !
!------------------------------  Çü½Ä º¯°æÀÚ   -------------------------------!
! %-¾î¶²Çü½Ä¹®ÀÚ -  ÃÖ¼ÒÆø ÀÌÇÏ¿¡¼­ ¿ÞÂÊÁ¤·Ä (±âº»°ªÀº ¿À¸¥ÂÊ Á¤·Ä)           !
! %20¾î¶²Çü½Ä¹®ÀÚ - 20 ±ÛÀÚ ÃÖ¼ÒÆø (°¡´ÉÇÒ ¶§¿¡´Â ¿ÞÂÊ¿¡ ¿©¹éÀÌ °¡´É)         !
! %.30¾î¶²Çü½Ä¹®ÀÚ - ÃÖ´ë 30±ÛÀÚ (ÇÊ¿äÇÏ¸é ¾Õ¿¡¼­ºÎÅÍ À߸°´Ù)                 !
! %-10.10r - ¿¹.  °æ°ú½Ã°£ÀÌ 10°³¹®ÀÚ ÀÌÇÏÀÇ ³ÐÀÌÀÌ¸é ¿ÞÂÊÁ¤·Ä                !
!            10°³¹®ÀÚ ÀÌ»óÀÇ ±æÀÌÀÌ¸é ¾Õ¿¡¼­ ºÎÅÍ À߸°´Ù.                     !
!-----------------------------------------------------------------------------!


!-----------------------------------------------------------------------------!
!                             OPTIONS GLOSSARY                                !
!-----------------------------------------------------------------------------!
!-------------------------OVERALL OPTIONS FOR log4j---------------------------!
! Ä¿¸Çµå ¶óÀÎ optionÀ¸·Î ¸í½Ã: -Dlog4j.defaultInitOverride=false
! Ä¿¸Çµå ¶óÀÎ optionÀ¸·Î ¸í½Ã: -Dlog4j.configuration=app_config.properties
!#log4j.debug=true
!#log4j.disable=INFO
!#log4j.disableOverride=false
!#log4j.additivity.your.category.name=false
!
!----------------------------NullAppender OPTIONS-----------------------------!
!#log4j.appender.dest1.Threshold=INFO
!
!---------------------------ConsoleAppender OPTIONS---------------------------!
!#log4j.appender.dest1.Threshold=INFO
!#log4j.appender.dest1.ImmediateFlush=true
!#log4j.appender.dest1.Target=System.err
!
!-----------------------------FileAppender OPTIONS----------------------------!
!#log4j.appender.dest2.Threshold=INFO
!#log4j.appender.dest2.ImmediateFlush=true
!#log4j.appender.dest2.File=mylog.txt
!#log4j.appender.dest2.Append=false
!
!-------------------------RollingFileAppender OPTIONS-------------------------!
!#log4j.appender.dest2.Threshold=INFO
!#log4j.appender.dest2.ImmediateFlush=true
!#log4j.appender.dest2.File=mylog.txt
!#log4j.appender.dest2.Append=false
!#log4j.appender.dest2.MaxFileSize=100KB
!#log4j.appender.dest2.MaxBackupIndex=2
!
!-----------------------DailyRollingFileAppender OPTIONS----------------------!
!#log4j.appender.dest2.Threshold=INFO
!#log4j.appender.dest2.ImmediateFlush=true
!#log4j.appender.dest2.File=mylog.txt
!#log4j.appender.dest2.Append=false
!#log4j.appender.dest2.DatePattern='.'yyyy-ww
!
!-----------------------------SimpleLayout OPTIONS----------------------------!
!**None**
!
!-------------TTCCLayout OPTIONS (PatternLayout is more flexible)-------------!
!#log4j.appender.dest1.layout.DateFormat=ISO8601
!#log4j.appender.dest1.layout.TimeZoneID=GMT-8:00
!#log4j.appender.dest1.layout.CategoryPrefixing=false
!#log4j.appender.dest1.layout.ThreadPrinting=false
!#log4j.appender.dest1.layout.ContextPrinting=false
!
!-----------------------------PatternLayout OPTIONS---------------------------!
!#log4j.appender.dest1.layout.ConversionPattern=%m%n
!
!-------------------------------HTMLLayout OPTIONS----------------------------!
!#log4j.appender.dest3.layout.LocationInfo=true
!#log4j.appender.dest3.layout.Title=My app title
!
!--------------------------------XMLLayout OPTIONS----------------------------!
!#log4j.appender.dest3.layout.LocationInfo=true
!-----------------------------------------------------------------------------!



- ÄÚµå»ó¿¡¼­ ¼º´ÉÀÌ ¸Å¿ì Áß¿äÇÑ °÷¿¡¼­´Â ·Î±ë¸Þ¼ÒµåÀÇ ÆĶó¹ÌÅ͸¦ ¸¸µå´Â ½Ã°£À» Àý¾àÇϱâ À§ÇØ ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÑ´Ù.
if (cat.isDebugEnabled() {
cat.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
}

- SimpleLayoutÀ» »ç¿ëÇÏ¿´°Å³ª %p, %m, %nÀÇ ÆÐÅϸ¸ »ç¿ëÇÏ¿© ¼³Á¤ÇÑ °æ¿ì System.out.println(...) ¸¸Å­ ¼º´ÉÀÌ
ºü¸£´Ù°í Å×½ºÆ®µÆ´Ù.

- ³»Æ÷°Ë»çÇ׸ñ(NDC)¸¦ »ç¿ëÇÑ´Ù : °¡²û ¼­ºí¸´Ã³·³ ÇϳªÀÇ Äڵ尡 °¢°¢ÀÇ Å¬¶óÀ̾ðÆ®¸¦ ¼­ºñ½º ÇϱâÀ§ÇØ
¿©·¯°³ÀÇ ½º·¹µå·Î ÀνºÅϽºÈ­ µÇ¾î ¸¹Àº Ŭ¶óÀ̾ðÆ®¸¦ ¼­ºñ½ºÇÑ´Ù.
À̶§ ´Ù¸¥ Ŭ¶óÀ̾ðÆ®·Î ºÎÅÍÀÇ ·Î±ë ¿äûÀ» Â÷º°È­Çϱâ À§Çؼ­ ³»Æ÷°Ë»çÇ׸ñ(NDC)¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÇÒ ¼ö ÀÖ´Â °ÍÀº ·Î±ëÇϱâ Àü¿¡ Ŭ¶óÀ̾ðÆ®ÀÇ °íÀ¯ÇÑ Á¤º¸¸¦ NDC·Î ³Ö´Â´Ù. °íÀ¯ÇÑ Á¤º¸´Â Ŭ¶óÀ̾ðÆ®ÀÇ IPÁÖ¼Ò,
È£½ºÆ®À̸§ ¶Ç´Â ¿äû°ú °ü·ÃµÈ ¾î¶² °Íµµ µÉ ¼ö ÀÖ´Ù. %x¸¦ layout ÆÐÅÏ¿¡ ¸í½ÃÇÏ¸é ¿äûÇÑ ·Î±× ¸Þ¼¼Áö¿¡
±× ¹®ÀÚ¿­(°íÀ¯ÇÑ Á¤º¸)À» Âï´Â´Ù.

import org.apache.log4j.*;

public class TestNDC {

// !log4j.properties ÆÄÀÏÀÌ Å¬·¡½ºÆнº »ó¿¡ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇ϶ó.

static Category cat = Category.getInstance(TestNDC.class.getName());

public static void main(String[] args) {

// ³»Æ÷°Ë»ç ¼³Á¤Àº ¼­ºí¸´°ú °°ÀÌ ¸ÖƼ½º·¹µå·Î ÀÌ·ç¾îÁø Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûµéÀ» ±¸º°ÇÑ´Ù.
NDC.push("Client #45890");

cat.info("Testing Nested Diagnostic Context (NDC).");
cat.info("Make sure %x is in layout pattern!");
cat.info("Client #45890 should appear in this log message.");

switchNDC();

cat.info("Finished.");
}

static void switchNDC() {
NDC.push("Client #99999");
cat.debug("Client #99999 should appear nested in this log message.");
NDC.pop();
}

}
ÀλýÀº ª½À´Ï´Ù.
±×·¯¹Ç·Î ´Ù¸¥ »ç¶÷ÀÌ ¿ä±¸ÇÏ´Â »îÀ» »ì¸é¼­ ½Ã°£À» ³¶ºñÇؼ­´Â ¾È µË´Ï´Ù.
µ·°ú ¸í¿¹¸¦ ¾òÁö ¸øÇÏ´õ¶óµµ ³¡±îÁö ÀÚ½ÅÀÇ ±æÀ» °íÁýÇϽʽÿÀ
¸ñ·Ï À­±Û ¾Æ·§±Û
³»¾Ë FREECOUNT.NET ÇÁÄ«³Ý »ý±ä³¯ 2003.12.20 Ȩ | Ä«¿îÅÍ | Ç÷¡½ÃºÏ | ÇÁ¸®º¸µå | Àü±¤ÆÇ | À¥°øºÎ¹æ | Ä¿¹Â´ÏƼ | ÂÊÁöÇÔ