ÕªÒª
ÎÒÃÇÔÚдÈÕÖ¾µÄʱºòÊ×ÏÈÒª»ñÈ¡logger£¬ÔÚÿһ¸öʹÓÃlog4jµÄÏîÄ¿¶¼Óкܶà¸öµØ·½Òª»ñÈ¡logger£¬ÕâЩloggerÊÇÕæÊµµÄ±»ÊµÀý»¯µÄLogger¶ÔÏó£¬ËûÃÇÓпÉÄܱ»·ÖÉ¢ÔÚÎÞÊý²»Í¬µÄÀàÖУ¬ÈÕÖ¾Ìåϵ½á¹¹½²µÄÊÇÕâЩlogger¶ÔÏóÊÇÈçºÎ×éÖ¯µÄ£¬ËûÃÇÖ®¼äÓÖÓÐʲôÑùµÄ¹ØÏµ¡£
Ìåϵ½á¹¹
ÎÒÃǾٸö¾ßÌåµÄʵÀýÀ´¿´¿´£¬¼ÙÉèÎÒµÄÏîÄ¿°ü½á¹¹ÈçÏ£º

ÏîÄ¿½á¹¹
˵Ã÷һϣºcom.flu.jdk°üÏÂÃæÓÐÁ½¸öÀà·Ö±ðÊÇLogTest1ºÍLogTest2£¬È»ºóÔÚ°ücom.flu°üÏÂÃæÓÐÒ»¸öLogTest3À࣬ºÜÏÔÈ»£¬com.flu.jdk°üÊÇcom.flu°üµÄ×Ó°ü¡£¼ÙÉèÎÒÃÇÔÚÕâÈý¸öÀàÖзֱðͨ¹ýLogManager.getLogger(xxx.class)»ñÈ¡Èý¸öloggerʵÀý£¬ËûÃÇ·Ö±ðÊÇlogger1¡¢logger2ºÍlogger3£¬ÎÒÃǽ«ÒªÌÖÂÛÕâÈý¸öloggerµÄ¹ØÏµ¡£
ÖµµÃ×¢ÒâµÄÊÇlog4jµÄÈÕÖ¾ÌåϵÖУ¬ÓÐÒ»¸öÌØÊâµÄÈÕÖ¾¶ÔÏó½Ð×öroot£¨¸ù£©£¬ËûÊÇʼÖÕ´æÔڵ쬼ÙÉèÎÒÃÇÊ×ÏÈ»ñÈ¡loggerʵÀý£¬log4j½«¹¹ÔìÏÂÃæÕâÑùÒ»¸öͼÐΣ¨ÎÒ²»ÄܰÑËü½Ð×öÊ÷£©£º

µ±Ö»ÓÐlogger1µÄʱºò
µ±ÎÒÃÇ»ñÈ¡logger2ʵÀýµÄʱºò£¬Õâ¸öͼ½«±ä³É£º

µ±¼ÓÈëlogger2ÈÕ־ʵÀýʱ½á¹¹Í¼
µ±ÎÒÃÇ»ñÈ¡logger3ʵÀýµÄʱºò£¬Õâ¸öͼÓÖ±äÁËÒ»¸öÑù£¬ÈçÏ£º

µ±¼ÓÈëlogger3ÈÕ־ʵÀýÖ®ºó
½ö½ö²ÅÈý¸öÈÕ־ʵÀý£¬Í¼¾Í¸ãµÄÂÔ¸´ÔÓ£¬¿ÉÏëlog4jÓ¦ÓÃÖУ¬½«»áÓÐÎÞÊýµÄÈÕ־ʵÀý°´ÕÕÕâ¸ö¹æÂÉ×é³É·×·±¸´ÔÓµÄÓÐÏòͼ½á¹¹£¬ËäÈ»¿´ÆðÀ´ÔÓÂÒ£¬µ«ÊÇÓÖ¹æÂÉ¡£ÄÇôÎÊÌâÀ´ÁË£¬ÕâÑùµÄ½á¹¹ÓÐʲôÓÃÄØ£¿ÏÂÒ»½ÚÎÒÃǽ«»á¿´µ½ÕâÖֽṹ¶ÔÓÚÈÕÖ¾ÅäÖü̳еÄÓ°Ïì¡£
ÅäÖü̳Ð
log4jÈÕÖ¾¼¶±ð¶¨Òå
ÔÚÍùÏÂÃæ¿´Ö®Ç°ÎÒÃÇÏÈÀ´¿´¿´log4j¶ÔÈÕÖ¾¼¶±ðµÄ¶¨Ò壺
public final static int OFF_INT = Integer.MAX_VALUE; public final static int FATAL_INT = 50000; public final static int ERROR_INT = 40000; public final static int WARN_INT = 30000; public final static int INFO_INT = 20000; public final static int DEBUG_INT = 10000; //public final static int FINE_INT = DEBUG_INT; public final static int ALL_INT = Integer.MIN_VALUE; |
ºÜÏÔÈ»£¬log4jµÄÈÕÖ¾¼¶±ðÓÐÏÂÃæµÄ¹ØÏµ£º
OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL |
log4jÔÚдÈÕÖ¾µÄʱºòÖ»Óе±µ±Ç°Ð´ÈÕÖ¾µÄ¼¶±ð´óÓÚµÈÓÚµ±Ç°ÈÕ־ʵÀýµÄÅäÖü¶±ðµÄʱºò£¬ÈÕ־д²Ù×÷²ÅÉúЧ£¬±ÈÈ統ǰÈÕ־ʵÀýµÄÅäÖü¶±ðΪINFO£¬ÄÇôlog.info»áд³É¹¦£¬¶ølog.debugÔò²»»áд¡£
ÈÕ־дԴÂëÆÊÎö
ÎÒÃÇÀ´¿´¿´Ò»¾ä¼òµ¥µÄlog.info(¡°this is log message¡±)µÄ±³ºó£¬ÏÈÀ´¿´¿´Ò»¶ÎÔ´´úÂ룺
public void info(Object message) { if(repository.isDisabled(Level.INFO_INT)) return; if(Level.INFO.isGreaterOrEqual(this.getEffectiveLevel())) forcedLog(FQCN, Level.INFO, message, null); } public boolean isDisabled(int level) { return thresholdInt > level; } |
Ê×ÏÈ¿´¿´µ±Ç°Ð´µÄÈÕÖ¾¼¶±ðÊÇ·ñ±»½ûÖ¹µÄ£¬Ä¬ÈϵÄÇé¿öÏÂthresholdIntΪALL£¬Òò´ËINFOµÄ¼¶±ðÏÔÈ»±ÈALL´ó£¬Òò´ËÏÂÃæ»á¼ÌÐø¿´¿´INFOµÄ¼¶±ðÊÇ·ñ´óÓÚµÈÓÚµ±Ç°ÈÕ־ʵÀýÉúЧµÄ¼¶±ð£¬this.getEffectiveLevel()»ñÈ¡µÄʵÀýÊÇÊ²Ã´ÄØ£¿ÎÒÃǼÌÐø¿´¿´´úÂ룺
public Level getEffectiveLevel() { for(Category c = this; c != null; c=c.parent) { if(c.level != null) return c.level; } return null; // If reached will cause an NullPointerException. } |
µ±Ç°ÈÕÖ¾ÉúЧµÄ¼¶±ðÂ߼ΪÊ×ÏÈ¿´¿´µ±Ç°ÈÕ־ʵÀýÊÇ·ñÓÐÅäÖü¶±ð£¬Èç¹ûûÓУ¬ÄÇô¾Í¼ÌÐøÕÒµ±Ç°ÈÕ־ʵÀýµÄparent½Úµã£¬°´ÕÕÉÏÒ»½ÚÖÐËù±íÊöµÄ£¬Èç¹ûµ±Ç°ÈÕÖ¾µÄÈÕÖ¾¼¶±ðûÓÐÅäÖ㬵±ÕÒµ½rootµÄÈÕÖ¾¼¶±ð£¬²¢¸ù¾ÝrootµÄÈÕÖ¾¼¶±ðÀ´¶Ï¶¨ÊÇ·ñ¼ÌÐø½øÐÐÈÕ־д¡£ÕâÀïÌáÏÖÁËÈÕÖ¾¼¶±ðµÄ¼Ì³Ð¹ØÏµ£¬Æäʵ²»½ö½öÊÇÈÕÖ¾¼¶±ð£¬ÈÕÖ¾ÆäËûÏà¹ØµÄÅäÖÃÒ²»á»ùÓÚÕâÖּ̳еÄÌØÐÔ£¬±ÈÈçappenderµÈ¡£
ÏîĿӦÓÃ
Á˽âLog4jµÄÈÕÖ¾Ìåϵ½á¹¹ÒÔ¼°ÈÕ־дÓëÈÕÖ¾¼¶±ð¹ØÏµÖ®ºó£¬ÎÒÃÇÏÖÔÚÓ¦¸Ã±È½ÏÇå³þÏîÄ¿ÖÐÓ¦¸ÃÈçºÎÅäÖÃÁË¡£ÒÔLog4j.xmlÅäÖÃÎļþΪÀý×Ó£¬Âú×ã»ù±¾ÐèÇóÎÒÃÇÖ»ÐèÒªÅäÖÃrootÕâ¸öÈÕ־ʵÀýµÄÈÕÖ¾¼¶±ð¼´¿É£¬ÈçÏ£º
<root> <level value="INFO" /> <appender-ref ref="CONSOLE" /> </root> |
ÉÏÃæÅäÖÃÁËrootÈÕ־ʵÀýµÄÈÕÖ¾¼¶±ðΪINFO£¬Èç¹û»ñÈ¡°´ÕÕÒ»¶¨¹æ·¶£¨µ±Ç°ÀàµÄȨÏÞ¶¨Ãû×÷ΪÈÕ־ʵÀýÃû£©£¬ÄÇôÎÒÃÇ¿ÉÒÔ±£Ö¤ËùÓеÄÈÕ־ʵÀý½«¼Ì³ÐrootËùÅäÖõÄÈÕÖ¾¼¶±ð¡£
ÅäÖøôÀë
ÉÏÃæµÄÅäÖÃÂÔ´Ö²Ú£¬¼ÙÈçÎÒÃÇÏëΪ²»Í¬µÄÄ£¿é¸øÓ費ͬµÄÅäÖÃÔõô°ìÄØ£¿×î³£¼ûµÄÊÇÒµÎñÈÕÖ¾ÓëÖмä¼þÈÕÖ¾£¬±ÈÈçÎÒÃǵÄÒµÎñÒµÎñ°üÃûΪcom.dianping.biz£¬¶øÎÒÃǵÄrpc×é¼þµÄ°üÃû×ÖΪcom.dianping.pigeon£¬ÔòÎÒÃÇ¿ÉÒÔʹÓÃÏÂÃæ·½·¨¸øÓ費ͬµÄÄ£¿é²»Í¬µÄÅäÖãº
<!--ÒµÎñÈÕÖ¾ÅäÖÃ--> <category name="com.dianping.biz"> <level value="INFO" /> <appender-ref ref="CONSOLE" /> </category> <!--pigeon×é¼þÈÕÖ¾ÅäÖÃ--> <category name="com.dianping.pigeon"> <level value="DEBUG" /> <appender-ref ref="CONSOLE" /> </category> |
ͨ¹ýÉÏÃæµÄÅäÖã¬ÎÒÃÇ¿ÉÒÔÖ¸¶¨com.dianping.biz°üÏÂÃæËùÓÐÀà»ñÈ¡µÄlogger¶¼¼Ì³ÐnameΪcom.dianping.bizµÄÈÕÖ¾ÅäÖ㬶øcom.dianping.pigeon°üÏÂÃæµÄËùÓÐÀà»ñÈ¡µÄlogger¶¼¼Ì³ÐnameΪcom.dianping.pigeonµÄÈÕ־ƪÈÕÖ¾¡£²»¹ýͨ³£Éè¼ÆÁ¼ºÃµÄÖмä¼þ¶¼¶¨ÖÆÁËÈÕÖ¾ÅäÖÃÒÔÈ·±£Öмä¼þÈÕÖ¾ÓëÒµÎñÈÕÖ¾¸ôÀë¡£ |