?????????????£???????????
????????????????????????ó?????????????????????£????????????????????????μ????bug?????????????log????????
?????е?????????????????????????
????log.info("Happy and carefree logging");
?????????????????????ó??????????????????????????е???????
?????????slf4j???????API????????????????????????????????
????log.debug("Found {} records matching filter: '{}'"?? records?? filter);
????log4j??????????????
????log.debug("Found " + records + " recordsmatching filter: '" + filter + "'");
????????д????????o?????????????????????Ч???????????????????????????
????slf4j??????{}???????????????????????ζ??????????????toString?????????????????????????isDebugEnabled???
????slf4j???????????????????????????檔??????????????logback???????????????ι????????????????????log4j????????????????????????log4j???????????????????????????С?
??????????????????????perf4j??
????Perf4J is to System.currentTimeMillis() as log4j is to System.out.println()
???????log4j??System.out.println??????????滻????????perf4j??????System.currentTimeMillis()???????
?????????????????????????perf4j???????????????1??????????????????????????????С??????????????????????
????????????????????????perf4j???????????????????????????????????????????????
???????????Ceki Gülcü??log4j??slf4j??logback????????????????????????????????????commons-logging????????
??????????????????
????????????????????????????????????????????????????90%???????????????????????????????????????????????????INFO??DEBUG???????
???????????System.out??????????????????????????????????????????????????????????????????????
????ERROR ????????????????????????????????????????κ?????????????????磺??????????????????????·?????????????????С?
????WARN ?????????к??????????????????????????????????????????????????????????????????????????磬"???????????????????????"??????????????????????饗????“?????????????????”????“???????????????????”??????ó????????????Щ???????????????????鼰?????
????DEBUG ???????????????????????????????????ü???????????
????TRACE ???????????????????????á??????????????С???????????????????????Щ???????????Щ????????????????????ù???DEBUG??TRACE??????????????????????????????????????????????????????????????????????TRACE??????
??????????б??????????飬????????????????????????????????????????????????????????????治????????????????????????????????????????????????????????????????????
?????????????????????????is*Enabled?????????????е????????????????????????
????if(log.isDebugEnabled())
????log.debug("Place for your commercial");
????????????????????????????????????????????????????????????????????????slf4j???????????????????????У????????????е??????????????????????????????????ж???????????????????????????????????????????????????????????????????????????ɡ?
???????????????????
?????????д????????????????俴????????????????????Щ??????????????????????????????????????????????????
????log.debug("Processing request with id: {}"?? request.getId());
??????????request????null????
????????????????????????????Hibernate????????????????????????????С??д??????????
????log.debug("Returning users: {}"?? users);
????slf4j??????????????????????????toString???????????????????????????????N+1??????????????????????????????洢?????????...??Щ???п????????
????????????????????ID????????????????С???????????ID???????????????getId???????????Java????治??????????Groovy?и????????????????users*.id??????Java???????????Commons Beanutils????????£?
????log.debug("Returning user ids: {}"?? collect(users?? "id"));
????collect?????????????????
????public static Collection collect(Collection collection?? String propertyName) {
????return CollectionUtils.collect(collection?? new BeanToPropertyValueTransformer(propertyName));
????}
?????????????toString????????????????????????á?
??????????????????????????????toString????????????????? ToStringBuilder??????????????????????????????汾????
????????????????????????????????Щ?????????toString????????а??????????????toString?????????????JDK????Arrays#deepToString?????????????????????????????????????и???????Щ?????
????????????
?????????????????????????????????????????????Щ????????????е???????????Hibernate??LazyInitializationException????????????????μ?????????????????????Щ??????????????????????????????????????£????????????????????????????????????????????Щ?????????????????????????????BUG??
????????????????????????????????????????????????????????????????????????????toString?????????????????????????????????????ж???e????????????????????15??????????Σ??????????????μ??????????????????????????????????С??????????????????????
?????????????????????????μ????????????????????????????????????????????????????д??
????try {
????log.trace("Id=" + request.getUser().getId() + " accesses " + manager.getPage().getUrl().toString())
????} catch(NullPointerException e) {}
???????????????????????????????徻????????д??
?????????????
???????????????????????????????????????????
????log.debug("Message processed");
????log.debug(message.getJMSMessageID());
????log.debug("Message with id '{}' processed"?? message.getJMSMessageID());
??????????????????????????????????????????????????????????????Щ???????????????????????????
????if(message instanceof TextMessage)
????//...
????else
????log.warn("Unknown message type");
????????????????????????????????ID?????Щ????????????????????????????????????????????????????????????
????????????????????“??????”??????????????????????????????????3??&???????????????????#???????????α????????????ζ??”ID?XYZ??????????”????????????????????????????????????”&&&!#”??????????????????????????
????????????????????????????????????????????????????????????perl????
?????????????????????????????????????????????Щ????????????????ID?????????????????????????????????????塣????????????Щ????????????????????????????????
??????????????????????и???????????????????????????
?????????????
??????????????????????????????????????????м???????????????????????????????????????а????????????????????????С????д???????м??????????????????????????????????????????????????????????????????????????????е?????????????????????????????——??????????????????????????ó????У??????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????logback????????????
????<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
????<encoder>
????<pattern>%d{HH:mm:ss.SSS} %-5level [%thread][%logger{0}] %m%n</pattern>
????</encoder>
????</appender>
??????????????????к?????????н???????????????????????á?????????????????????????
????log.info("");
????????????????к?????????????????????????????????????????????????????67?е??????ζ????????????????????????????????????????????????к????????к??????
???????????????????????????????????????Mapped Diagnostic Context????MDC????????????????map?????????κμ?????????map??????????????????????????????????map??????????????????????????????