java-日志框架
一需求材料1 common-logging2 jcl-over-slf4j3 slf4j-api4 logback-classic.5 spring-beans.4.15.二 簡單流程
org.springframework.web.context.ContextLoader.initWebApplicationContext -275org.apache.commons.logging.Log logger = org.apache.commons.logging.LogFactory.getLog(ContextLoader.class)org.apache.commons.logging.LogFactory.getFactory()org.apache.commons.logging.LogFactory.getCachedFactory()org.apache.commons.logging.LogFactory.getConfigurationFile()org.apache.commons.logging.LogFactory.getSystemProperty()org.apache.commons.logging.LogFactory..getResourceAsStream()org.apache.commons.logging.LogFactory.cacheFactory()org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(org.slf4j,Logger slf4jLogger = org.slf4j.LoggerFactory.getLogger(org.slf4j.ILoggerFactory iLoggerFactory = org.slf4j.LoggerFactory.getILoggerFactory(org.slf4j.LoggerFactory.performInitialization(org.slf4j.LoggerFactory.bind(org.slf4j.LoggerFactory.findPossibleStaticLoggerBinderPathSet()org.slf4j.LoggerFactory.reportMultipleBindingAmbiguity()StaticLoggerBinder.getSingleton(); reportActualBinding(staticLoggerBinderPathSet); emitSubstituteLoggerWarning ) )return org.slf4j.impl.StaticLoggerBinder.getSingleton().getLoggerFactory(););); org.apache.commons.logging.Log newInstance = new org.apache.commons.logging.impl.SLF4JLocationAwareLog((LocationAwareLogger) slf4jLogger);)三 核心API
common-logging.jar (I)org.apache.commons.logging.Log(A)org.apache.commons.logging.LogFactoryjcl-over-logging.jar(C)org.apache.commons.logging.impl.SLF4JLogFactory extends org.apache.commons.logging.LogFactory(C)org.apache.commons.logging.impl.SLF4JLocationAwareLog implements org.apache.commons.logging.Logslf4j-api.jar(I)org.slf4j.Logger(C)org.slf4j.LoggerFactory(I)org.slf4j.ILoggerFactory(I)org.slf4j.spi.LocationAwareLogger extends org.slf4j.Loggerlogback-classic.jar (C)ch.qos.logback.classic.LoggerContext extends ContextBase implements org.slf4j.ILoggerFactory(C)org.slf4j.impl.StaticLoggerBinder implements org.slf4j.spi.LoggerFactoryBinder
(羅嗦話)
正如我之前說的,在你的代碼中使用SLF4J寫日志語句的主要出發(fā)點是使得你的程序獨立于任何特定的日志類庫,依賴于特定類庫可能需要使用不同于你已有的配置,并且導(dǎo)致更多維護(hù)的麻煩。除此之外,還有一個SLF4J API的特性是使得我堅持使用SLF4J而拋棄我長期間鐘愛的Log4j的理由,是被稱為占位符(place holder),在代碼中表示為“{}”的特性。占位符是一個非常類似于在String的format()方法中的%s,因為它會在運(yùn)行時被某個提供的實際字符串所替換。這不僅降低了你代碼中字符串連接次數(shù),而且還節(jié)省了新建的String對象。通過使用SLF4J,你可以在運(yùn)行時延遲字符串的建立,這意味著只有需要的String對象才被建立。而如果你已經(jīng)使用log4j,那么你已經(jīng)對于在if條件中使用debug語句這種變通方案十分熟悉了,但SLF4J的占位符就比這個好用得多。
(羅嗦話)
正如我之前說的,在你的代碼中使用SLF4J寫日志語句的主要出發(fā)點是使得你的程序獨立于任何特定的日志類庫,依賴于特定類庫可能需要使用不同于你已有的配置,并且導(dǎo)致更多維護(hù)的麻煩。除此之外,還有一個SLF4J API的特性是使得我堅持使用SLF4J而拋棄我長期間鐘愛的Log4j的理由,是被稱為占位符(place holder),在代碼中表示為“{}”的特性。占位符是一個非常類似于在String的format()方法中的%s,因為它會在運(yùn)行時被某個提供的實際字符串所替換。這不僅降低了你代碼中字符串連接次數(shù),而且還節(jié)省了新建的String對象。通過使用SLF4J,你可以在運(yùn)行時延遲字符串的建立,這意味著只有需要的String對象才被建立。而如果你已經(jīng)使用log4j,那么你已經(jīng)對于在if條件中使用debug語句這種變通方案十分熟悉了,但SLF4J的占位符就比這個好用得多。
?
轉(zhuǎn)載于:https://www.cnblogs.com/ak23173969/p/7911552.html
總結(jié)
- 上一篇: Linux操作系统下实现远程开机
- 下一篇: Replacing the ESXi H