ãšã³ããªãŒ
ãã°ãã¡ã€ã«ã«è¡ãæžã蟌ãæ£ããæ¹æ³ãžã®ãJavaãã©ãããã©ãŒã ã®åä»ã§æ²ããããã£ãéã Javaã§ã®ãã®ã³ã°ã®æŽå²ã¯ãäŒæ¥ãåã ã®ããã°ã©ããŒãšã®çžäºäœçšãªã©ããªãŒãã³ãœãŒã¹ã®æ©èœãç 究ãããšããç¹ã§éåžžã«æçã§ãã Javaãã®ã³ã°ã®æŽå²ããããã©ãã«æ¥ãã®ããã©ã®ããã«çããã®ãã«ã€ããŠãã§ããéã説æããŸãã ç§ã®ç¶æ³ã®åæã¯ãäŒæ¡ãåžžã«å¥œã¿ã®åé¡ã§ãããç§ã®å¥œã¿ãç§èªèº«ã®å€§äººã圢æããçç±ã«ã€ããŠéåžžã«äž»èŠ³çã§ãã åç©åå šäœã®ãã®ã³ã°ãã¬ãŒã ã¯ãŒã¯ã®æè¡çç¹åŸŽãšããç¹ã§ã¯ãªãããªãŒãã³ãœãŒã¹ã¢ãã«ã®éçºè ã®ããªã·ãŒãšå¿çåŠã®èŠ³ç¹ããã¯æçã ãšæããŸãã
éå§ãã
ãã®ã³ã°ã©ã€ãã©ãªã¯ãå°ãªããšãã³ã³ãœãŒã«/ãã°ãã¡ã€ã«ãžã®è¡ã®åºåãèš±å¯ããå¿ èŠãããããšã¯æããã§ãã
ãã¡ãããæåã¯
System.err.println
ã ããã«ããµãŒãã¬ããAPIã®æåã®ããŒãžã§ã³ã«ã¯
log
æ©èœãå«ãŸããŠããŸããïŒãã ããéåžžã«åå§çïŒã
1999幎ã®ããé«åºŠãªãœãªã¥ãŒã·ã§ã³ã®ãªãã·ã§ã³ã®1ã€ã¯ãDIãµãŒãã¹ã«å ããŠLogEnabledã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããAvalonãããžã§ã¯ãïŒããã³Excaliburããã³FortressãšåŒã°ãããµããããžã§ã¯ãïŒã§ããã LogEnabledã宣èšãããªããžã§ã¯ããæ¿å ¥ãããŸããïŒDIãšã®æ¥ç¶ã匷調ããããã«ãæ¿å ¥ãã®ä»£ããã«ãã®åèªã䜿çšããŸãïŒãã¿ã€ãLoggerã®ãªããžã§ã¯ãã§ãaïŒè¡bïŒäŸå€ãèšè¿°ã§ããŸãã åœæã®ãã®ã¢ãããŒãã¯æ°é®®ã§é©æ°çãªããã«èŠããŸããããçŸä»£ã®èŠ³ç¹ããèŠããšãããã¯çŽç²ãªæãããšéå°ãªãšã³ãžãã¢ãªã³ã°ã§ãã ãã®ã³ã°ã«DIã䜿çšããŠãæå³ããããŸããããã®Loggerã®éçã€ã³ã¹ã¿ã³ã¹ã¯èª°ã«ã§ãé©ããŠããŸãã Avalonã§ã¯ããã®ã²ã©ãLoggerãä¿åããå Žæãšãã¯ã©ã¹ãDIã䜿çšããŠããªãå ŽåïŒã€ãŸããã³ã³ããã«ãã£ãŠå¶åŸ¡ãããŠããªãå ŽåïŒã«ã©ãããã°ããããèããå¿ èŠããããæ¬åœã«ãã°ã€ã³ããããšæããŸãã
1999幎é ãæ°äžä»£ã©ã€ãã©ãªlog4jãç»å ŽããŸãã ã©ã€ãã©ãªã®ãããã¿ã€ãã¯IBMã«ãã£ãŠéçºããïŒåœæãéã巚人ãJavaãOS / 2ã«è©°ã蟌ãããšããŠããæ代ã«ïŒãASFãããã³ãæã«å ¥ããŸããã ãã®è£œåã¯ãã§ã«ãå®éã®ããŒãºã«åºã¥ããŠããå€ãã®æ€èšãšãã¹ããè¡ââãããŸããã äžè¬ã«ãåœæã®Javaã®ãµãŒããŒã¢ããªã±ãŒã·ã§ã³ã¯1幎ã»ã©åã®ãã®ã§ããããµãŒããŒã§ã¯åžžã«ãã°ãèŠæ±ãããŠãããšèšããããåŸãŸããã ãã®éãJavaã³ãã¥ããã£ã¯ã圌ããäœãã©ã®ããã«å¿ èŠãšããŠããããåŸã ã«ç解ãå§ããŸããã
log4jã¯ããã¬ãŒãŸãã¯ã«ããŽãª ïŒã€ãŸãããã°ã«æžã蟌ã¿ããã¢ããªã±ãŒã·ã§ã³ã®é åïŒã®æŠå¿µãããããappendersã«ãã£ãŠå®è¡ãããå®éã®ãã°ãšã³ããªãããã³ã¬ã³ãŒãã®ãã©ãŒãããïŒ ã¬ã€ã¢ãŠã ïŒãåå²ããŸããã log4jæ§æã¯ãã©ã®ã¢ãã³ããŒãã©ã®ã«ããŽãªãŒã«ã¢ã¿ããããããã決å®ãã ãã°ã¬ãã«ã¡ãã»ãŒãžã¯åã¢ãã³ããŒã«åé¡ãããŸãã
log4jã®åºç€ã¯ãã«ããŽãªã®éå±€ã§ãã ããšãã°ã
org.hibernate
ããã®ãã¹ãŠã®ã¡ãã»ãŒãžãèšé²ãã
org.hibernate
ãããã¹ãŠããã¥ãŒãã§ããŸãã ãã°ããããŠãäºå®äžãã¢ããªã±ãŒã·ã§ã³ã®ã«ããŽãªéå±€ãšããã±ãŒãžéå±€ãäžèŽãããæ £è¡ã確ç«ãããŸããã
ã«ããŽãªã®éå±€ã«ãããäžèŠãªã¡ãã»ãŒãžãéåžžã«å¹æçã«é®æã§ãããããlog4jã¯éåžžã«è³¢ãæ©èœããŸããã ã¡ãªã¿ã«ããã¬ãŒã®åºæ¬çãªããšã¯ãäžèŠãªïŒéåžžã¯90ïŒ ãè¶ ããäžèŠãªïŒãã£ã«ã¿ãŒåŠçãšãã©ãŒãããã®èšé²é床ã»ã©èšé²é床ã§ã¯ãããŸããã
log4jã§èŠå®ãããŠããååã¯ãlog4cxxãlog4netïŒããã³æ°ããcub-log4phpïŒãªã©ãä»ã®èšèªã«éåžžã«ããŸã移æ€ãããŠããŸãã Python 2.xã®æšæºãã®ã³ã°ããã±ãŒãžã¯ãlog4jãåèšèšãããã®ã§ãïŒä»ã®ã©ã€ãã©ãªãå°ãè¿œå ããŸããïŒã
ããã§ãèŠçŽããŸãã æåããã¢ãŒããã¯ãã£ãæ確ãªæ§æã¹ããŒã ã ãã§ã€ã«ã»ãŒãã®åå-ãã©ãããã©ãŒã ã«ãã®ãããªçŽ æŽãããã©ã€ãã©ãªãå«ããŠã¿ãŸãããïŒ
Java Logging API
å®éããã¹ãŠãå¥åŠã«ãªããŸããã IBMã¯ãlog4jãçºçããæ·±ãã§ãæ°ããJSR47ïŒJava Logging APIïŒã®åœ¢æãçåèŠããã®ã«éåžžã«è¿ éã§ããããšãå€æããŸããã ç¹ã«ãJSR47ã®è²¬ä»»è ã§ããåå¿Graham Hamiltonã¯ãlog4jãåºç€ãšããŠã§ã¯ãªãã å ã®IBMãã®ã³ã°ããŒã«ããããæ¡çšããããšã決å®ããŸããã ããã«ããã®ã³ã°ããŒã«ãããã¯æ倧éã«äœ¿çšãããŸããããã¹ãŠã®ã¡ã€ã³ã¯ã©ã¹ã®ååãäžèŽããã ãã§ãªãããããã®å®è£ ãäžèŽããŸããã ãã©ãããã©ãŒã ã®æ¬¡ã®ãªãªãŒã¹ããã£ããããããã«ã圌ãã¯ã³ãŒããã§ããéãå°ãªãããããšããŸããã ãã ããæŠå¿µçã«ã¯log4jãšéåžžã«ãã䌌ãŠããŠãã¢ãã³ããŒã®ä»£ããã«ãã³ãã©ãŒãšåŒã°ããã¬ã€ã¢ãŠãã®ä»£ããã«ãã©ãŒããã¿ãŒããããŸããã
JSR47ã®äž»ãªç®çã¯å®è£ ã§ã¯ãªãAPIãå®çŸ©ããããšã§ãã£ãããã 䜿çšå¯èœãªïŒãã©ãããã©ãŒã ã®ããã©ã«ãã®ïŒåºåããŒã«ã¯4ã€ïŒlog4jã«ã¯10以äžïŒãããªãããã©ãŒããã¿ãŒã¯éåžžã«è²§åŒ±ã§ãããããã«ãã©ãŒããã¿ãŒãäœæããå¿ èŠããããŸããååã§ã¯ãããŸããã JSR47ã¯ã
.properties
ã®åœ¢åŒã§æ§æã䜿çšããããšãææ¡ãããã¡ã€ã«å ã«ãã¹ãŠãèšè¿°ã§ããããã§ã¯ãªãããšãæ¬åŒ§å ã«èšèŒããŸããã ãããã£ãŠãæ§æãè€éãªå Žåãããã°ã©ããŒã¯äºæãããã³ãŒããèšè¿°ããå¿ èŠãããããšãããããŸããã
.properties
ã®åœ¢åŒã§ã¯
.properties
ãã®æ§æã¯å®çŸã§ããŸããã
ããã¯ãJSR47ã®ããã©ãŒãã³ã¹ãäœäžãããšããããšã§ã¯ãããŸããã ããã€ãã®å Žæã§ã圌ã¯ã¡ã¢ãªå ã«åœŒã®èšå®ã®ç¹å¥ãªè¡šçŸãä¿æããããšã§log4jãè¿œãè¶ããŸããïŒå¶ç¶ã«ããã®èšå®ãè€éã«ããŸããïŒã ããããå€æããããã«ãJSR47ã¯ããããçºä¿¡è æ å ±ãã€ãŸãããã®ã¡ãã»ãŒãžã¯ã©ãããæ¥ãã®ããã匷å¶çã«åéããŸããã çºä¿¡è æ å ±ã®ååŸã¯ãããªãé«äŸ¡ãªæäœã§ããããã€ãã£ãã³ãŒãã䜿çšããŠç¶è¡ããŸãã log4jã®çµéšè±å¯ãªåç¶ã¯ãããç¥ã£ãŠããã®ã§ããã®æ©äŒã«ãããããªã³ã«ããªãæ¹ãããããšããæ¡ä»¶ãæäŸããŸããã
log4jã®éçºè ã¯ãªãŒãã³ãªè«é¡æžãäœæãããã¢ã»ã³ããªã©ã€ã³ããJSR47ãåé€ãããããšãèŠæ±ããŸãããããŸã ãã©ãããã©ãŒã ã®äžéšã§ã¯ãããŸããã§ããã è«é¡æžã¯100人以äžã®äººã ã«ãã£ãŠçœ²åãããŸãã...ããããããã¯é ãããŸããã JDKã®æ¬¡ã®ãªãªãŒã¹ãæ¿èªããããã©ãããã©ãŒã ã¯åæ©çãª
java.util.logging
ããŸãã¯ç¥ããŠJULã§æªæ¥ã«åºãŸããŸããã æ°ãããã®ã³ã°ã¯éåžžã«æªéçºã§äžäŸ¿ã ã£ããããããã€ãã®ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒïŒResinãšJettyã®äžã§ïŒã§ã®ã¿äœ¿çšããããšã«ããŸããã ããããSunã¯è«é¡ã«å¿ããå ã®JSR47ã®äž»èŠãªåé¡ã®ã»ãšãã©ã¯åŸã ã«è§£æ¶ãããŸããã ããã«ããããããããããã®æäœã¯ãæšè£œã®æ©ã«æ¯æ±ãåãä»ãããããªãã®ã§ããã®æ©ã¯éçã³ã³ã¯ãªãŒãã§ã¯ãããŸããã log4jéçºè ã¯Sunã«åãã£ãŠçž®å°ããŸããããJULã®æ²çã¯ãŸã ããªãé«ãããšã«æ³šæããŠãã ããã ç¹ã«ãJDK 1.4ã©ã€ã»ã³ã¹ã§ã¯ã log4j ã JULå®è£ ãšããŠäœ¿çšã§ããŸããã§ãã ã log4jã®æçµåè»ã¯ãªããªããŸããã
å€æ°ã®ãã°ã©ã€ã¿ãŒïŒã€ãŸããã³ãã©ãŒïŒããµããŒãã§ããªããããJULã¯ä¿¡ããããªãã»ã©å€ãã®ãã°ã¬ãã«ãå®çŸ©ããããšã§èªæ ¢ããŸããã ããšãã°ãã¡ãã»ãŒãžã®ãããã°ã«ã¯ãFINEãFINERãFINESTã®3ã€ã®ã¬ãã«ããã§ã«ãããŸããã ããããã¹ãŠèŠããšãéçºè ã¯ãã°ãã°ã3ã€ã®ã¬ãã«ã®ãã¡ã©ãã䜿çšãã¹ããããŸã£ããç解ããŠããŸããã§ããã
Javaã³ãã¥ããã£ã¯ã人æ°ã®ããå®å®ããéçºäžã®log4jãšäžŠè¡ãããæšæºããã®ã³ã°ã®åºçŸã«ããå®å šã«æ··ä¹±ããŸããã 2ã€ã®ãã¡ã©ã¡ããããã³ãã§ãããã¯èª°ã«ãããããŸããã§ããã ãããžã§ã¯ãã§è€æ°ã®ã©ã€ãã©ãªãã¢ã»ã³ãã«ããããããããç¬èªã®ãã®ã³ã°ãšç¬èªã®èšå®ã䜿çšããŠããã°ãã¡ã€ã«ããŸã£ããç°ãªãæ¹æ³ã§èšé²ããç¶æ³ããã°ãã°ãããŸããã
ãã¡ãããã³ãã¥ããã£ã¯ãã®åé¡ãä¿®æ£ããããšããŸããã ã©ããã³ã°ã®æµè¡ãå§ãŸã£ãã ãŸãã¯ãç§ã¯ãã³ãããã¯ãšããèšãã§ãããã
ã©ãããŒå°ç
è€æ°ã®ã©ã€ãã©ãªãæ¥ç¶ãããããã®ãã°ã1ã€ã®å šäœã«çµåããããšãããšïŒããã³ã³ãŒãã¯å€æŽã§ããŸããïŒãããã¯ã¢ããã¿ãŒãšåŒã°ããŸãã JULã¢ããã¿ãŒã¯log4jã§äœæããããã®éãåæ§ã§ãã æ®å¿µãªãããæ©èœã¢ããã¿ãŒã¯ãæå°å ¬åæ°ãã§ãã ã³ã³ããã¹ããµããŒãïŒNDCããã³MDCïŒãlog4jã«ç»å Žããå Žåã§ããJULã®èŒžè¡äžã«å€±ãããŸããã ããã«æªãããšã«ãJULã¯JDK 1.4以éã§ããæ©èœããŸããã§ãããããšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ã®æ°ã¯äŸç¶ãšããŠ1.3ã®ãŸãŸã§ããã ãã®çµæãã³ãã¥ããã£ã¯ã誰ããäžç·ã«äœ¿çšãããã€ã§ãã©ãã§ãæ©èœãããäºå®äžã®å ±éåºæºããäœæãããšããèãã«åãä»ãããŸããã
2002幎é ãcommons-loggingïŒJCL = Jakarta Commons LoggingïŒãšåŒã°ãããããžã§ã¯ããJakartaã°ã«ãŒãããç»å ŽããŸããã å®éããã®æç¹ã§ååšããŠãããã¹ãŠã®ãã®ã³ã°ããŒã«ã®ã©ãããŒã§ããã ã©ãããŒïŒ
Log
ãšåŒã°ããã€ã³ã¿ãŒãã§ãŒã¹ïŒã䜿çšããããã«ã¢ããªã±ãŒã·ã§ã³ãäœæãããé©åãªããã®ã³ã°ã·ã¹ãã ãéžæããŠããèªäœã«æ¥ç¶ããããšãææ¡ãããŸããã ã©ãããŒã¯æ©èœçã«è²§åŒ±ã§ãæ¢åã®ãã°ããŒã«ã«è¿œå ããŸããã§ããã
é©åãªãã®ã³ã°ã·ã¹ãã ã¯ã©ã®ããã«èªåçã«éžæãããŸãããïŒ ããããããã¯æãèå³æ·±ãã§ãã ãŸããCLASSPATHã®ã©ããã«ç¹å¥ãª
commons-logging.properties
ãã¡ã€ã«ãé 眮ããããšã§ãæ瀺çã«èšå®ã§ããŸãã 第äºã«ãã·ã¹ãã ããããã£ãä»ããŠïŒæããã«ã誰ãããŸããïŒã 第äžã«ãlog4jãCLASSPATHã®ã©ããã§æ€åºãããå Žåãèªåçã«ã¢ã¯ãã£ãåãããŸããã ä»ã®ãã¹ãŠã®ã©ã€ãã©ãªã®å®è£ ãåãæ¹æ³ã§æ€çŽ¢ãããæåã®ã©ã€ãã©ãªã¯åžžã«æ¥ç¶ãããŠããŸããã
ãããïŒ ãŸããã€ãŸããäžçäžã®ãã¹ãŠã®ãœãããŠã§ã¢ãcommons-loggingã䜿çšããŠãããšããã§ããã ã ãã®åŸãJARãå®å šã«åéããŠã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã«é 眮ãããšãJCLããã®ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®ãã°ãååŸããŸãã
å®éãå€æããããã«ãå€ãã®ãœãããŠã§ã¢ã¯éåžžãéçºè ã®ãæ°ã«å ¥ãã®ãã°ãã䜿çšããŸãã ããã¯ãå®å šã«ä»»æã®ã©ã€ãã©ãªãäŸåé¢ä¿ã®åœ¢åŒã§ãããšãã°log4jããã«ã¢ããã§ããããšãæå³ããŸãããããã£ãŠãCLASSPATHã«åé¡ãããlog4jã䜿çšããããã«JCLãäºæããåãæ¿ããããŸãã
commons-logging.properties
ããã«æªåã
commons-logging.properties
ã 掻å家ãèªåã®JARã«ãããæŒã蟌ãããšãèããŠããå Žåããã®JARãæ¥ç¶ãããšãããªãèªèº«ãç解ããæžã蟌ã¿ã倱ãããŸãã ç¶æ³ã®ç¹å¥ãªäžæ£è¡çºã¯ããããã©ã®JARããææããã®ããå®å šã«ç解ã§ããªããšããäºå®ã«ãã£ãŠäžããããŸããã æã ããã¹ãŠã®JARãã¢ã«ãã¡ãããé ã«ãœãŒãããã®ã«åœ¹ç«ã¡ãŸããã æã«ã¯ã¿ã³ããªã³ã
ãã®ã³ã°ã®éžæãå®å šã«äºæž¬äžèœã§ããããšããJCLã®äž»èŠã§éåžžã«æ¥œããæ©èœã§ããããšãå€æããŸããã log4jã°ã«ãŒãã¯ãcommons-logging APIãæ¡çšããåã«ãæã£ãŠããThink againèšäºã§ççºããŸãããããã¯ãæµè¡ãæ¢ããæ¢åã®ãœãªã¥ãŒã·ã§ã³log4jã®æ¹è¯ã«éäžããããšãææ¡ããŸããã
æ®å¿µãªãããæé ãã§ããã æ°çŸãæ°åã®å³æžé€šããžã£ã«ã«ã¿ããã³ã¢ã³ãºãã®ã³ã°ã«ç§»ãããŸããã ãã®äžã«ã¯ãHibernateãSpringãTomcatããããŸããã ãã®åŸããããã®ã©ã€ãã©ãªã®å€ãã®ãŠãŒã¶ãŒã¯ãäžè¬çã«ClassLoader hellãšåŒã°ããåé¡ã®æ³¢ã«æµãããŸããã ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã¯ãããªãè€éãªClassLoaderã®éå±€ã䜿çšããŸãããå€ãã®å ŽåãJ2EEæšæºãã倧ããéžè±ããŠããŸãã ãããã®æ¡ä»¶äžã§ã¯ã JCLã2ååæåããã誀ã£ãŠåæåãããå®å šã«ç¥ç§çãªã¹ã¿ãã¯ãã¬ãŒã¹ãçºçãããã°ã©ãããŒã«åé¡ããããšçãããšããã§ããªããªããŸãã
å®éããªããªãŒãã³ãœãŒã¹ããã®ãããªå¥åŠãªæ¹æ³ã§æ©èœãããã®åé¯ãçã¿åºããã®ã§ããããïŒ ãªãéçºè ã¯ããã1ã€ã®æçãã人æ°ã®ãããªãŒãã³ãœãŒã¹è£œåã§ããlog4jã䜿çšããã ãã§ã¯ãããŸãããïŒ ããã§ã®ãã€ã³ãã¯ããããããASFïŒããã³ãã®æªå€¢ãçæãããžã£ã«ã«ã¿ã°ã«ãŒããASFã®äžéšã§ããïŒãŸãã¯Sunã远跡ããããã«äœ¿çšãããã³ãã¥ããã£ã®ç¹å®ã®æ £æ§ã§ãã JCLã䜿çšãããããžã§ã¯ãã®ã¯ãªãã£ã«ã«ãã¹ã圢æããããšããã«ãä»ã®å šå¡ïŒæãæããªäººã ã§ã¯ãªããGavin KingïŒïŒãJCLã®äœ¿çšãéå§ããŸãïŒApacheã¯çŽ æŽãããããã§ãïŒïŒã ããã¯äžè¬çã«ãApacheãSunãªã©ã®ãã©ã³ããäœçŸäžäººãã®éçºè ãæ¥ãã§ããäœå§åã®é åãäœæã§ãããã©ãŠã³éåãé£æ³ãããŸãã JCLã®å Žåãããµã¯ã»ã¹ã¹ããŒãªãŒãã¯2003幎ã«Rod Waldhoff ïŒãããããžã£ã«ã«ã¿ã³ã¢ã³ãºã®éçºè ã®1人ïŒã®ããã°ã§èª¬æãããŸããã
æ°ããªé²å±
ãããã£ãŠã2004幎ã®ã©ããã§ãããã«å«ãŸããŠããŸãã
- å®å®ããŠæ©èœçã«éçºãããlog4j
- éãjava.util.logging
- åé¡ã³ã¢ã³ãº-ãã®ã³ã°
- èšåãã䟡å€ã®ãªãå°æ°ã®å°ããªãã¬ãŒ
çŸæç¹ã§ã¯ãlog4jãããžã§ã¯ãã§ã¯ä¿å®çãªé°å²æ°ãåªå¢ã§ããããšã«æ³šæããŠãã ããã å€ãJDKãšã®äºææ§ã«ç¹ã«æ³šæãæãããŸããã æ°ãããã©ã³ãlog4j-1.3.xã®éçºã®ããã§ãã ãã®ããŒãžã§ã³ã¯ãäžçš®ã®åŠ¥åãœãªã¥ãŒã·ã§ã³ã§ããã¯ããæ°ããæ©èœãå¿ èŠã§ããã¯ããäžäœäºææ§ãç¶æãããã§ããã¯ããç§ãã¡ãšããªãã®äž¡æ¹ãæºè¶³ãããããšããŸãã ãã®éãå¯å€åŒæ°ãJMXæ¡åŒµæ©èœããã®ä»ã®ã®ãããåããJDK 1.5ã®éäžã§ã log4jããŒã ã¯è³æ³¢ãéå§ããŸããã 2.xãã©ã³ãã¯åãé¢ãããŠããŸããã¡ã€ã³ã®1.2.xãã©ã³ããšã¯äºææ§ããªããJDK 1.5å°çšã«äœæãããŠããŸãã Javaã³ãã¥ããã£ã¯çæ°ã§ãã ããã¯äœããšããŠèµ·ãã£ãŠããããã§ãã ããããæ£ç¢ºã«ç解ããŠã¯ãªããªãã®ã¯ãlog4j 2.0ã¯ãŸã éæã§ããªãã¢ã«ãã¡ã§ãããlog4j 1.3ã¯éåžžã«ãã°ãå€ããããããã€ã³ã®äºææ§ãçŽæãããŠããªãããšã§ãã ãã©ã³ã1.2ã®ã¿ããŸã å®å®ããŠãããæ°å¹Žã§ãžã£ã³ãããŸã -泚æïŒ -ããŒãžã§ã³1.2.6ãã1.2.12ã
2006幎ã®ã©ããã§ãlog4jã®åµèšè ã®1人ã§ããCekiGÃŒlcÃŒã¯ãæ¥éã«è¡°éããããŒã ãå»ãããšã«æ±ºããŸããã ãã®ãããSLF4JïŒJavaçšã®ã·ã³ãã«ãã®ã³ã°ãã¡ãµãŒãïŒãšåŒã°ãã次ã®ããã¹ãŠã®ã©ãããŒããèªçããŸããã ããã¯ãlog4jãJULãcommons-loggingãããã³logbackãšåŒã°ããæ°ãããã¬ãŒã®ã©ãããŒã§ãã ã芧ã®ãšãããé²æç¶æ³ã¯ããã«ãã©ãããŒã®åšãã®ã©ãããŒãã®æ®µéã«éããŸããã åãã¹ããŒã ã«ããã°ãã©ãããããã©ã€ãã©ãªã®æ°ãéä¹ãšããŠå¢å ããããšãäºæž¬ããã®ã¯ç°¡åã§ãã ãã ããSLF4Jã«ã¯ä»ã®å·¥å€«ããããŸãã ãããã¯ãlog4jããSLF4Jãcommons-loggingããSLF4Jãªã©ãžã®ç¹å¥ãªãã€ããªã¢ããã¿ã§ãã ãã®ãããªã¢ããã¿ãŒã¯ããœãŒã¹ãå©çšã§ããªãã³ãŒãçšã«äœãããŠããŸãã ãã ãããã°ã©ã€ãã©ãªã®å ã®JARã眮ãæããå¿ èŠããããŸãã ãããã©ããªãridgeã«ãªãã®ãæ³åã§ããŸããããæ¬åœã«ãããã®ãªãã§ããŸãã
ç§ã®ã©ãããŒã«å¯Ÿããæãã¿ãã¹ãŠã«ãšã£ãŠãæ£çŽãªãšãããSLF4Jã¯ããã§ãã補åã§ãã åä»»è ã®ãã¹ãŠã®æ¬ ç¹ãèæ ®ãããŸããã ããšãã°ãCLASSPATHã§ã¯ã©ã¹æ€çŽ¢ãè¡ãã·ã£ãŒãããºã ãã³ã¹ã®ä»£ããã«ãããä¿¡é Œæ§ã®é«ãã¹ããŒã ãèæ¡ãããŸããã ããã§ãã©ãããŒå šäœã2ã€ã®éšåã«åå²ãããŸã
slf4j-log4j12.jar
ïŒã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããïŒãšããã®ã³ã°ã®åã¿ã€ãã®åå¥ã®JARãã¡ã€ã«ã§è¡šãããå®è£ ïŒããšãã°ã
slf4j-log4j12.jar
ã
slf4j-jdk14.jar
ãªã©ïŒã å¿ èŠãªå®è£ ãã¡ã€ã«ããããžã§ã¯ãã«æ¥ç¶ããã ãã§ååã§ãããã®åŸããã£ãšïŒ 䜿çšããããã¹ãŠã®ãããžã§ã¯ãã³ãŒããšãã¹ãŠã®ã©ã€ãã©ãªïŒSLF4J APIã«ã¢ã¯ã»ã¹ããå ŽåïŒã¯ãæ£ããæ¹åã«ãã°ã€ã³ããŸãã
æ©èœçã«ã¯ãSLF4Jã¯NDCãMDCãªã©ã®ææ°ã®æ©èœããã¹ãŠãµããŒãããŠããŸããã åŒã³åºããå®éã«ã©ããããããšã«å ããŠãSLF4Jã¯ãæååããã©ãŒããããããšãã«ãå°ãããªããã䟿å©ãªããŒãã¹ãæäŸããŸããã ããã§ã®ããŒãã¹ã¯æ¬¡ã®ãšããã§ãã ã³ãŒãã§ã¯ãå€ãã®å Žåããã©ãŒã ã®æ§é ãå°å·ããå¿ èŠããããŸãã
log.debug("User " + user + " connected from " + request.getRemoteAddr());
å®éã«æååãåºåããããšã«å ããŠãããã§ã¯
user.toString()
å€æã®åŸã«æååã®é£çµãæé»çã«ç¶ããŸãã ãã¹ãŠã¯äœããªãã§ãããã ãããã°ã¢ãŒãã§ã¯ãå®è¡é床ã¯ããã»ã©æ°ã«ãªããŸããã ãã ããããšãã°INFOã§ã¬ãã«ãèšå®ããå Žåã§ããæååã®æ§ç¯ã¯åŒãç¶ãè¡ãããããšãããããŸãã å¥è·¡ã¯ãããŸãã
log.debug
åŒã³åºãåã«è¡ãæ§ç¯ãããããã
log.debug
ã¯ãããäœããã®æ¹æ³ã§å¶åŸ¡ããæ¹æ³ããããŸããã ãã®
log.debug
ããã€ãã®éèŠãªå éšã«ãŒãã«é 眮ãããŠãã
log.debug
æ³åãããš...äžè¬çã«ãããªãã¯ãã®ããã«çããããšã¯ã§ããŸããã log4jã®éçºè ã¯ã次ã®ãããªãããã°ã³ãŒãã®ãã¬ãŒãã³ã°ãææ¡ããŸããã
if (log.isDebugEnabled()) { log.debug("User " + user + " connected from " + request.getRemoteAddr()); }
è¯ããªã çè«çã«ã¯ããããã®åé¡ã¯ãã¹ãŠãã®ã³ã°ã©ã€ãã©ãªèªäœã§åŠçããå¿ èŠããããŸãã ãã®åé¡ã¯ãåã«log4jã®ã¢ãã¬ã¹è ±ã§ããã éçºè ã¯ããã¯ã«ç·©æ ¢ã«åå¿ãããªããžã§ã¯ãããã®ã³ã°ã³ãŒã«ïŒæ£ç¢ºã«ã¯1ã€ïŒïŒã«è¿œå ã§ããããã«ãªãã
ObjectRenderer
ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠãã®ãªããžã§ã¯ãããã°ã«æžã蟌ãŸããæ¹æ³ã«ã€ããŠã説æããŸããã æŠããŠããããã¯ãã¹ãŠèšãèš³ãšååã®æªçœ®ã§ããã
SLF4Jã¯ãå€ãããŒãžã§ã³ã®JDKããã³APIãšã®äºææ§ã®ãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠå§è¿«ãããŠããªãã£ããããããã«ãããšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ãææ¡ããŸããã
log.debug("User {} connected from {}", user, request.getRemoteAddr());
äžè¬çã«ããã¹ãŠã¯ç°¡åã§ãã ãã®è¡ã®
{}
ã¯ãåå¥ã«æž¡ããããã©ã¡ãŒã¿ãŒãžã®ãªã³ã¯ã§ãã ãã©ã¡ãŒã¿ãŒãæååã«å€æãããã°ã¬ã³ãŒãã®æçµãã©ãŒãããã¯ãDEBUGã¬ãã«ãèšå®ãããŠããå Žåã«ã®ã¿è¡ãããŸãã å€ãã®ãã©ã¡ãŒã¿ãŒãæž¡ãããšãã§ããŸãã ããŸãããïŒ ãã¬ãŒãã³ã°ãèšè¿°ããå¿ èŠã¯ãããŸããã
æ¬åŒ§å ã§ãGStringã®æŠå¿µãããGroovyèšèªã«ãã£ãŠããã®æ©èœãå®å šã«äºæããå®è£ ãããããšã«æ³šæããå¿ èŠããããŸãã æååã衚瀺
"User ${user} connected from ${request.getRemoteAddr()}"
ãããã€ãã®ã³ã³ããã¹ãå€æ°ïŒããã§ã¯user
ã
request
ïŒã«æé»çã«é¢é£ä»ããããŠãããæååã®èšç®ã¯å»¶æãããŸã ã ããã¯ãlog4jãªã©ã®ãã°ã©ã€ãã©ãªã«ãšã£ãŠéåžžã«äŸ¿å©ã§ããGStringå ¥åã«å ¥åããèšç®ããã«ç Žæ£ããããéåžžã®ïŒéçïŒæåå-æååã«å€æã§ããŸãã
èŠããã«ãSLF4Jã¯å°æ¥ã«åããŠæèœã«äœãããŸããã ããã«ãããã³ãã¥ããã£ã§ã®äººæ°ãå€§å¹ ã«é«ãŸããŸãããçŸåšãSLF4Jã¯ãJettyãHibernateãMinaãGeronimoãMuleãWicketãNexusãªã©ã®éèŠãªãããžã§ã¯ãã§äœ¿çšãããŠããŸã...äžè¬çã«ããã€ãŠcommons-loggingã«ããã£ãŠããã»ãšãã©ãã¹ãŠã®æè ã¯SLF4Jã«åãæ¿ããŸããã äœå¹Žãåã«ãã³ã¢ã³ãºã®ãã°ãç®çã®ç¶æ ã«æ¹åãããªãã£ãã®ã¯ãªãã§ããããïŒ ãããããããã¯ãªãŒãã³ãœãŒã¹ã®çŸå®ã§ãããã®äžã§ã®ãœãããŠã§ã¢ã®éçºã¯ãé²åãããé©åœçã§ãã
SLF4Jãšåæã«ããŸã£ããæ°ãããã¬ãŒãããŒãã«ã«è¿œå ãããŸãã-Logbackã ããã¯äŒæ¡ã§ç¬ãé£ã¹ãç·æ§ã«ãã£ãŠäœãããå®éã«ã¯æ¬åœã«è¯ã補åã§ããããšãå€æããŸããã logbackã¯ããšããšJDK 1.5+ã®äžã§ç ãæŸãŸãããlog4jãããžã§ã¯ãã«å åšãããã¹ãŠã®è人æ§äžäœäºææ§çŸæ£ãäžæ°ã«åãé€ããã ãããŠããã¯ãå¯å€åŒæ°ã
java.util.concurrent
ã ãã®ä»ã®åã³ãæå³ããŸãã ããšãã°ãçµã¿èŸŒã¿ã®ã©ã³ã¿ã€ã ãã£ã«ã¿ãªã³ã°ã·ã¹ãã ã«ããããŠãŒã¶ãŒã»ãã·ã§ã³ã«å¿ããŠãã°ã¬ãã«ãå€æŽãããããŠãŒã¶ãŒãå¥ã®ãã°ãã¡ã€ã«ã«åæ£ãããããããšãã§ããŸãã
èè ãæããç°åã«ãã¹ã¿ãŒããæããŸãã ãããã®æ©èœã®ã»ãšãã©ã¯ãlog4jã®è¿œå ã¢ãã³ããŒãšããŠå®è£ ã§ããŸãã æ§æãæ²ããŠãã¡ã€ã«ããããšã¯ããå°é£ã§ãããããã®ããã«æ°ãããã¬ãŒã«åãæ¿ããå¿ èŠã¯ãªããšããäºå®ã§ãã ãããã£ãŠãLogbackã§ã¢ããã¿ã€ãºããããã¹ãŠã®ãããã¯äŸ¿å©ã§ãããäžæã§ã¯ãããŸããã
ã³ãã¥ããã£ã«é¢ããŠã¯ãLogbackãæ éã«æ±ããŸãã ãŸããæ°å¹Žã®ãã¡ã«åœŒã¯ããŒãžã§ã³0.9.xã«å°éããŸããããããã¯äžéšã®ããã°ã©ããŒãæããããŸãã 第äºã«ãLogbackã¯Apacheã®åäžã«ãSunã®ã¹ã³ãŒãå ã«ããããŸããã ããã¯scåž³é¢ãªäººã ãæ©ãŸãã 第äžã«ãäœè ã¯é£ã¹ãå¿ èŠããããããLogbackãšãµããŒãã®äžéšã®ã¢ããªã³ã«ã¯ãéãå¿ èŠã§ãã ããã¯æã çåŸãæããããŸãã ãšããããLogbackã«ã¯ããªãè€éãªãã¥ã¢ã«ã©ã€ã»ã³ã¹ïŒLGPL / EPLïŒããããŸãããlog4jã«ã¯ãŠãããŒãµã«Apacheã©ã€ã»ã³ã¹ããããŸãã ã©ã€ãã©ãªããã³äžè¬çã«åé åžå¯èœãªãœãããŠã§ã¢ã®å Žåãã©ã€ã»ã³ã¹ã¯éåžžã«åŸ®åŠãªãã€ã³ãã§ãã
æŠããŠãä»æ¥ã®Logbackã¯é²åã®é ç¹ã§ããLogbackã«å ããŠã10åã®æ°ãããã®ã³ã°ã©ã€ãã©ãªãç»å ŽããŸããããã©ããçãæ®ããªãå¯èœæ§ãé«ãã§ããèŠçŽãããšãçŸæç¹ã§ã®ç¶æ³ã¯æ¬¡ã®ãšããã§ãã
- log4j-æåã¯ããã¯ãããŠããã移è¡ã®å¿ èŠæ§ãèŠããŸããã
- JULã¯éãã«æ»ã«ãããŠããæšæºã§ããæåã«ããã䜿çšããããšãããã¹ãŠã®äººã¯ãLogbackã«ç§»åããŸãã
- commons-logging-éåžžãããè¯ããã®ã«ç§»åããããšã§ãŠãŒã¶ãŒã«äžäŸ¿ãããããããšãéåžžã«æããã¬ã¬ã·ãŒã©ã€ãã©ãªã«é¢äžããŸãã
- SLF4J-ã©ã€ãã©ãªã§éåžžã«äººæ°ããããŸããå€ãã¯ã³ã¢ã³ãºãã®ã³ã°ã®ææã«èããããšãã§ããŸããã§ãã
- ãã°ããã¯ã¯éåžžãlog4jãé©ããªãææ°ã®é«æ§èœãµãŒããŒã§ãã
ãªãŒãã³ãœãŒã¹ã³ãã¥ããã£ã¯ãéå¿ãã«çŸ€ããåŸåããããšãã§ã«è¿°ã¹ãŸãããçŸåšããã®ãããªéå¿ã¯ããã®ãæ®éæ§ãã®ããããããSLF4Jã§ããSLF4Jã®çžå¯Ÿçãªäººæ°ã¯ãããçšåºŠæ°ããã©ãããŒã®åºçŸãä¿èšŒããŸããSLF4Jã䜿çšãããããžã§ã¯ãã®æ°ã¯ããã§ã«ãã¯ãªãã£ã«ã«ãã¹ããèç©ããã®ã«ååã§ãããã°ããã¯ïŒåãèè ãæ°ã«ããªãã§ãã ããïŒã«ã¯ããã®ãããªã¯ãªãã£ã«ã«ãã¹ã¯ãããŸãããïŒã¡ãªã¿ã«ãlog4jã¯ä»ã§ãé»éã®å±±ãšããŒãžã§ã³2.0ãçŽæããŸãããç©äºã¯ãŸã ãããŸããïŒLogbackããã©ã€ããåãããApacheã«ç§»è¡ãããšã圌ã®äœçœ®ã¯å€§ããæ¹åãããšæããŸãã
ãããã«
åé¡ã®æŽå²ãããã°ã©ããŒã®å¿çåŠã®èŠ³ç¹ããèŠãã®ã¯èå³æ·±ããå®éãååãšããŠãããã¯ãã¹ãŠã¹ãã€ã©ã«ã§ãïŒãããŠãããã¯é²æ©çã§ããããã§ãïŒïŒéå-ç¡éã®ãè»èŒªã®åçºæããã€ãŸãããæ¢åã®å€æŽããšãç¬èªã®æäœããšãã2ã€ã®ãªãã·ã§ã³ã®ãã¡ã2çªç®ã®ãªãã·ã§ã³ãåžžã«éžæãããŠããŸããããããã£ãŠãèšåããããããžã§ã¯ãã®ãããããïŒéåžžã«äºå®äžã®åºæºã«åºã¥ããŠïŒç¡æ¡ä»¶ã®ãªãŒããŒã«åå²ãããŠããŸããã代ããã«ãéçºè ã¯ãäžç·ã«è¡åããã®ã§ã¯ãªããç°ãªããããžã§ã¯ãã§ç°ãªãæéã«ãåãå»ãŸãããå¥ã ã«è¡åããŸããããã¹ãŠã®èè ã1ã€ã®ããŒã ã§äœæ¥ã§ãããšããäºå®ã§ã¯ãããŸããããæ¿æ²»çãªç¬éãããïŒã°ã©ãã ããã«ãã³ãIBMãã©ã®ããã«æããŠããããæãåºããŠãã ããïŒãããŒã ã®äºçŽ°ãªå£è«ã ãã§ãããã³ãã¥ããã£ã«ãéžæã®èªç±ããæäŸããããšãããžã£ã«ã«ã¿ã³ã¢ã³ãºã®åå è ã®æ¬²æ±ã¯ãäžè¬ã«ã³ãã¥ããã£ã®é·ããã©ãããŒã®æµè¡ãã«å€ãããŸããã
äžè¬ã«ããããã®æªã¯ãã¹ãŠãªãŒãã³ã³ãã¥ããã£ã®å žåã§ãããã®10幎以äžã®æŽå²ã¯ãSunãJavaã³ãã¥ããã£ã§äœãã決å®ããŠããããã«æãããä»ããã®ä¿¡å¿µãã©ãã»ã©èª€ã£ãŠãããã瀺ããŠããŸããSunã«åããŠãSunããç¬ç«ããŠå€ãã®ããšãèµ·ãã£ãããšãããããŸããäžèšã§èšãã°ãç§ã¯ãããããã«ã©ã®ããã«é²ãã®ã ããããç§ã¯äžã€ã®ããšã確信ããŠããŸã-ãããžã§ã¯ãã¯è¡ãæ¥ãã人ã ã¯å€ãããŸãã:)