<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                https://my.oschina.net/xianggao/blog/522467 無論從設計上還是實現上,Logback相對log4j而言有了相對多的改進。不過盡管難以一一細數,這里還是列舉部分理由為什么選擇logback而不是log4j。牢記logback與log4j在概念上面是很相似的,它們都是有同一群開發者建立。所以如果你已經對log4j很熟悉,你也可以很快上手logback。如果你喜歡使用log4j,你也許會迷上使用logback。 # 1 系列目錄 * 2種日志接口框架,4種日志實現框架 * [jdk-logging、log4j、logback日志介紹及原理](http://my.oschina.net/xianggao/blog/515381) * [jcl與jul、log4j1、log4j2、logback的集成原理](http://my.oschina.net/xianggao/blog/515996) * [slf4j與jul、log4j1、log4j2、logback的集成原理](http://my.oschina.net/xianggao/blog/516947) * [slf4j、jcl、jul、log4j1、log4j2、logback大總結](http://my.oschina.net/xianggao/blog/517188) * [slf4j + log4j原理實現及源碼分析](http://my.oschina.net/xianggao/blog/519199) * Apache Log4j * [Log4j架構分析與實戰](http://my.oschina.net/xianggao/blog/518059) * [Log4J配置文件詳解](http://my.oschina.net/xianggao/blog/515216) * Apache Commons Logging * [Commons Logging 架構分析](http://my.oschina.net/xianggao/blog/520323) * JDK Logging * [JDK Logging 深入分析](http://my.oschina.net/xianggao/blog/520776) * Logback * [從Log4j遷移到LogBack的理由](http://my.oschina.net/xianggao/blog/522467) * [Logback 深入分析](http://my.oschina.net/xianggao/blog/522590) * Apache Log4j2 * [Log4j2架構分析與實戰](http://my.oschina.net/xianggao/blog/523020) * [Log4j2配置文件詳解](http://my.oschina.net/xianggao/blog/523401) # 2 更快的執行速度 基于我們先前在log4j上的工作,`logback 重寫了內部的實現`,在某些特定的場景上面,`甚至可以比之前的速度快上10倍`。`在保證logback的組件更加快速的同時,同時所需的內存更加少`。 # 3 充分的測試 Logback 歷經了幾年,數不清小時數的測試。盡管log4j也是測試過的,但是`Logback的測試更加充分,跟log4j不在同一個級別`。我們認為,這正是人們選擇Logback而不是log4j的最重要的原因。人們都希望即使在惡劣的條件下,你的日記框架依然穩定而可靠。 # 4 logback-classic 非常自然的實現了SLF4J `logback-classic中的登陸類自然的實現了SLF4J`。當你使用 logback-classic作為底層實現時,涉及到LF4J日記系統的問題你完全不需要考慮。更進一步來說,由于 logback-classic強烈建議使用SLF4J作為客戶端日記系統實現,如果需要切換到log4j或者其他,你只需要替換一個jar包即可,不需要去改變那些通過SLF4J API 實現的代碼。這可以大大減少更換日記系統的工作量。 # 5 使用XML配置文件或者Groovy 配置logback的傳統方法是通過XML文件。在文檔中,大部分例子都是是用XML語法。但是,對于logback版本0.9.22,[通過Groovy編寫的配置文件](http://logback.qos.ch/manual/groovy.html)也得到支持。`相比于XML,Groovy風格的配置文件更加直觀,連貫和簡短的語法`。現在,已經有[一個工具自動把logback.xml文件遷移至logback.groovy](http://logback.qos.ch/translator/asGroovy.html)。 # 6 自動重新載入配置文件 Logback-classic可以在[配置文件被修改后,自動重新載入](http://logback.qos.ch/manual/configuration.html#autoScan)。`這個掃描過程很快,無資源爭用,并且可以動態擴展支持在上百個線程之間每秒上百萬個調用`。它和應用服務器結合良好,并且在JEE環境通用,因為它不會調用創建一個單獨的線程來做掃描。 # 7 優雅地從I/O錯誤中恢復 FileAppender和它的子類,包括RollingFileAppender,可以優雅的從I/O錯誤中恢復。所以,`如果一個文件服務器臨時宕機,你再也不需要重啟你的應用,而日志功能就能正常工作`。當文件服務器恢復工作,logback相關的appender就會透明地和快速的從上一個錯誤中恢復。 # 8 自動清除舊的日志歸檔文件 通過設置TimeBasedRollingPolicy 或者 SizeAndTimeBasedFNATP的?`maxHistory 屬性`,你就可以控制日志歸檔文件的最大數量。`如果你的回滾策略是每月回滾的,并且你希望保存一年的日志,那么只需簡單的設置maxHistory屬性為12`。對于12個月之前的歸檔日志文件將被自動清除。 # 9 自動壓縮歸檔日志文件 RollingFileAppender可以在回滾操作中,自動壓縮歸檔日志文件。`壓縮通常是異步執行的`,所以即使是很大的日志文件,你的應用都不會因此而被阻塞。 # 10 謹慎模式 `在謹慎模式中,在多個JVM中運行的多個FileAppender實例,可以安全的寫入統一個日志文件`。謹慎模式可以在一定的限制條件下應用于RollingFileAppender。 # 11 Lilith Lilith是logback的一個記錄和訪問事件查看器。它相當于log4j的 chainsaw,但是`Lilith設計的目的是處理大量的日志記錄`。 # 12 配置文件中的條件處理 開發者通常需要在不同的目標環境中變換logback的配置文件,例如開發環境,測試環境和生產環境。這些配置文件大體是一樣的,除了某部分會有不同。為了避免重復,logback支持[配置文件中的條件處理](http://logback.qos.ch/manual/configuration.html#conditional),`只需使用<if>,<then>和<else>,那么同一個配置文件就可以在不同的環境中使用了`。 # 13 過濾 Logback擁有遠比log4j更豐富的[過濾能力](http://logback.qos.ch/manual/filters.html)。例如,讓我們假設,有一個相當重要的商業應用部署在生產環境。考慮到大量的交易數據需要處理,記錄級別被設置為WARN,那么只有警告和錯誤信息才會被記錄。現在,想象一下,你在開發環境遇到了一個臭蟲,但是在測試平臺中卻很難發現,因為一些環境之間(生產環境/測試環境)的未知差異。 使用log4j,你只能選擇在生產系統中降低記錄的級別到DEBUG,來嘗試發現問題。但是很不幸,這會生成大量的日志記錄,讓分析變得困難。更重要的是,多余的日志記錄會影響到生產環境的性能。 `使用logback,你可以選擇保留只所有用戶的WARN級別的日志,而除了某個用戶,例如Alice,而她就是問題的相關用戶`。當Alice登錄系統,她就會以DEBUG級別被記錄,而其他用戶仍然是以WARN級別來記錄日志。這個功能,可以通過在配置文件的XML中添加4行。 # 14 SiftingAppender [SiftingAppender](http://logback.qos.ch/manual/appenders.html#SiftingAppender)是一個全能的追加器。`它可以基于任何給定的實時屬性分開(或者篩選)日志`。例如,SiftingAppender可以基于用戶會話分開日志事件,這樣,可以為每一個用戶建立一個獨立的日志文件。 # 15 堆棧軌跡信息包含包的數據 當logback打印一個異常,堆棧軌跡信息將包含包的相關數據。下面是一個通過?[logback-demo](http://logback.qos.ch/demo.html)?生成的堆棧信息: ~~~ 14:28:48.835 [btpool0-7] INFO c.q.l.demo.prime.PrimeAction - 99 is not a valid value java.lang.Exception: 99 is invalid at ch.qos.logback.demo.prime.PrimeAction.execute(PrimeAction.java:28) [classes/:na] at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) [struts-1.2.9.jar:1.2.9] at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) [struts-1.2.9.jar:1.2.9] at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) [struts-1.2.9.jar:1.2.9] at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) [servlet-api-2.5-6.1.12.jar:6.1.12] at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502) [jetty-6.1.12.jar:6.1.12] at ch.qos.logback.demo.UserServletFilter.doFilter(UserServletFilter.java:44) [classes/:na] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) [jetty-6.1.12.jar:6.1.12] at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361) [jetty-6.1.12.jar:6.1.12] at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) [jetty-6.1.12.jar:6.1.12] at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) [jetty-6.1.12.jar:6.1.12] ~~~ 從上面的信息,你可以發現這個應用使用Struts 1.2.9 而且是使用 jetty 6.1.12部署的。所以,`堆棧軌跡信息將快速的告訴讀者,關于異常發生的類還有包和包的版本`。當你的客戶發送一個堆棧軌跡信息給你,作為一個開發人員,你就不需要讓他們告訴你他們正在使用的包的版本。這項信息已經包括在堆棧軌跡信息中。詳細請參考?["%xThrowable" conversion word](http://logback.qos.ch/manual/layouts.html#xThrowable). # 16 Logback-access模塊,提供了通過HTTP訪問日志的能力,是logback不可或缺的組成部分 最后但絕非最不重要的是,作為logback發布包的一部分,`logback-access模塊可與Jetty或者Tomcat進行集成,提供了非常豐富而強大的通過HTTP訪問日志的功能`。因為logback-access模塊是logback初期設計方案中的一部分,因此,所有你所喜歡的logback-classic模塊所提供的全部特性logback-access同樣也具備。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看