日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Logback介绍及入门

發(fā)布時間:2025/3/12 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Logback介绍及入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Logback簡介

Logback是由log4j創(chuàng)始人設(shè)計的又一個開源日志組件。

logback當(dāng)前分成三個模塊:logback-core,logback-?classic和logback-access。logback-core是其它兩個模塊的基礎(chǔ)模塊。logback-classic是log4j的一個?改良版本。此外logback-classic完整實現(xiàn)SLF4J?API使你可以很方便地更換成其它日志系統(tǒng)如log4j或JDK14?Logging。logback-access訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能。?Logback是要與SLF4J結(jié)合起來用兩個組件的官方網(wǎng)站如下:

logback的官方網(wǎng)站:http://logback.qos.ch

SLF4J的官方網(wǎng)站:http://www.slf4j.org

本文章用到的組件如下:

????logback-access-1.0.0.jar

????logback-classic-1.0.0.jar

????logback-core-1.0.0.jar

????slf4j-api-1.6.0.jar

如果使用Maven,則依賴如下:

[html]?view plain?copy ?
  • <dependency>????
  • ???????<groupId>ch.qos.logback</groupId>????
  • ???????<artifactId>logback-classic</artifactId>????
  • ????<version>1.0.11</version>????
  • </dependency>???
  • 這樣依賴包全部自動下載了!


    logback的優(yōu)點:

    ????1、更快的實現(xiàn)??Logback的內(nèi)核重寫了,在一些關(guān)鍵執(zhí)行路徑上性能提升10倍以上。而且logback不僅性能提升了,初始化內(nèi)存加載也更小了。

    2、非常充分的測試??Logback經(jīng)過了幾年,數(shù)不清小時的測試。Logback的測試完全不同級別的。

    3、Logback-classic非常自然實現(xiàn)了SLF4j????Logback-classic實現(xiàn)了?SLF4j。在使用SLF4j中,你都感覺不到logback-classic。而且因為logback-classic非常自然地實現(xiàn)了SLF4J,??所以切換到log4j或者其他日志框架非常容易,只需要提供成另一個jar包就OK,根本不需要去動那些通過SLF4JAPI實現(xiàn)的代碼。

    ????4、非常充分的文檔??官方網(wǎng)站有兩百多頁的文檔。

    ????5、自動重新加載配置文件??當(dāng)配置文件修改了,Logback-classic能自動重新加載配置文件。掃描過程快且安全,它并不需要另外創(chuàng)建一個掃描線程。這個技術(shù)充分保證了應(yīng)用程序能在JEE環(huán)境里面跑得很歡。

    ????6、Lilith???Lilith是log事件的觀察者,和log4j的chainsaw類似。而lilith還能處理大數(shù)量的log數(shù)據(jù)?。

    ????7、謹(jǐn)慎的模式和非常友好的恢復(fù)??在謹(jǐn)慎模式下,多個FileAppender實例跑在多個JVM下,能夠安全地寫到同一個日志文件。RollingFileAppender會有些限制。Logback的FileAppender和它的子類包括RollingFileAppender能夠非常友好地從I/O異常中恢復(fù)。

    ????8、配置文件可以處理不同的情況???開發(fā)人員經(jīng)常需要判斷不同的Logback配置文件在不同的環(huán)境下(開發(fā),測試,生產(chǎn))。而這些配置文件僅僅只有一些很小的不同,可以通過,和來實現(xiàn),這樣一個配置文件就可以適應(yīng)多個環(huán)境。

    ????9、Filters(過濾器)??有些時候,需要診斷一個問題,需要打出日志。在log4j,只有降低日志級別,不過這樣會打出大量的日志,會影響應(yīng)用性能。在Logback,你可以繼續(xù)保持那個日志級別而除掉某種特殊情況,如alice這個用戶登錄,她的日志將打在DEBUG級別而其他用戶可以繼續(xù)打在WARN級別。要實現(xiàn)這個功能只需加4行XML配置??梢詤⒖糓DCFIlter?。

    ???10、SiftingAppender(一個非常多功能的Appender)??它可以用來分割日志文件根據(jù)任何一個給定的運行參數(shù)。如,SiftingAppender能夠區(qū)別日志事件跟進用戶的Session,然后每個用戶會有一個日志文件。

    ???11、自動壓縮已經(jīng)打出來的log??RollingFileAppender在產(chǎn)生新文件的時候,會自動壓縮已經(jīng)打出來的日志文件。壓縮是個異步過程,所以甚至對于大的日志文件,在壓縮過程中應(yīng)用不會受任何影響。

    ???12、堆棧樹帶有包版本??Logback在打出堆棧樹日志時,會帶上包的數(shù)據(jù)。

    ???13、自動去除舊的日志文件??通過設(shè)置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory屬性,你可以控制已經(jīng)產(chǎn)生日志文件的最大數(shù)量。如果設(shè)置maxHistory?12,那那些log文件超過12個月的都會被自動移除。


    Logback的配置介紹

    1、Logger、appender及l(fā)ayout

    ? Logger作為日志的記錄器,把它關(guān)聯(lián)到應(yīng)用的對應(yīng)的context上后,主要用于存放日志對象,也可以定義日志類型、級別。

    ? Appender主要用于指定日志輸出的目的地,目的地可以是控制臺、文件、遠程套接字服務(wù)器、?MySQL、?PostreSQL、?Oracle和其他數(shù)據(jù)庫、JMS和遠程UNIX?Syslog守護進程等。

    ? Layout?負(fù)責(zé)把事件轉(zhuǎn)換成字符串,格式化的日志信息的輸出。

    2、logger?context

    ??各個logger?都被關(guān)聯(lián)到一個?LoggerContextLoggerContext負(fù)責(zé)制造logger,也負(fù)責(zé)以樹結(jié)構(gòu)排列各?logger。其他所有logger也通過org.slf4j.LoggerFactory?類的靜態(tài)方法getLogger取得。?getLogger方法以?logger?名稱為參數(shù)。用同一名字調(diào)用LoggerFactory.getLogger?方法所得到的永遠都是同一個logger對象的引用。

    3、有效級別及級別的繼承

    ? Logger?可以被分配級別。級別包括:TRACE、DEBUG、INFO、WARN??ERROR,定義于?ch.qos.logback.classic.Level類。如果logger沒有被分配級別,那么它將從有被分配級別的最近的祖先那里繼承級別。root?logger?默認(rèn)級別是?DEBUG。

    4、打印方法與基本的選擇規(guī)則

    ??打印方法決定記錄請求的級別。例如,如果?L?是一個?logger?實例,那么,語句?L.info("..")是一條級別為?INFO?的記錄語句。記錄請求的級別在高于或等于其?logger?的有效級別時被稱為被啟用,否則,稱為被禁用。記錄請求級別為?p,其?logger的有效級別為?q,只有則當(dāng)p>=q時,該請求才會被執(zhí)行。

    該規(guī)則是?logback?的核心。級別排序為:?TRACE?<?DEBUG?<?INFO?<?WARN?<?ERROR。?


    Logback的默認(rèn)配置

    ??如果配置文件?logback-test.xml??logback.xml?都不存在,那么?logback?默認(rèn)地會調(diào)用BasicConfigurator?,創(chuàng)建一個最小化配置。最小化配置由一個關(guān)聯(lián)到根?logger?ConsoleAppender?組成。輸出用模式為%d{HH:mm:ss.SSS}?[%thread]?%-5level?%logger{36}?-?%msg%n?PatternLayoutEncoder?進行格式化。root?logger?默認(rèn)級別是?DEBUG。

    1、Logback的配置文件

    ??????Logback?配置文件的語法非常靈活。正因為靈活,所以無法用?DTD??XML?schema?進行定義。盡管如此,可以這樣描述配置文件的基本結(jié)構(gòu):以<configuration>開頭,后面有零個或多個<appender>元素,有零個或多個<logger>元素,有最多一個<root>元素。

    2、Logback默認(rèn)配置的步驟

    ?????(1).?嘗試在?classpath?下查找文件?logback-test.xml

    ?????(2).?如果文件不存在,則查找文件?logback.xml

    ?????(3).?如果兩個文件都不存在,logback??BasicConfigurator?自動對自己進行配置,這會導(dǎo)致記錄輸出到控制臺。
    3、Logback.xml?文件

    [html]?view plain?copy ?
  • <?xml?version="1.0"?encoding="UTF-8"?>??
  • <configuration?debug="false">??
  • ????<!--定義日志文件的存儲地址?勿在?LogBack?的配置中使用相對路徑-->??
  • ????<property?name="LOG_HOME"?value="/home"?/>????
  • ????<!--?控制臺輸出?-->?????
  • ????<appender?name="STDOUT"?class="ch.qos.logback.core.ConsoleAppender">??
  • ????????<encoder?class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">???
  • ?????????????<!--格式化輸出,%d:日期;%thread:線程名;%-5level:級別,從左顯示5個字符寬度;%msg:日志消息;%n:換行符-->???
  • ????????????<pattern>%d{yyyy-MM-dd?HH:mm:ss.SSS}?[%thread]?%-5level?%logger{50}?-?%msg%n</pattern>?????
  • ????????</encoder>??
  • ????</appender>??
  • ????<!--?按照每天生成日志文件?-->?????
  • ????<appender?name="FILE"??class="ch.qos.logback.core.rolling.RollingFileAppender">?????
  • ????????<rollingPolicy?class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">??
  • ????????????<!--日志文件輸出的文件名-->??
  • ????????????<FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>???
  • ????????????<!--日志文件保留天數(shù)-->??
  • ????????????<MaxHistory>30</MaxHistory>??
  • ????????</rollingPolicy>?????
  • ????????<encoder?class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">???
  • ????????????<!--格式化輸出,%d:日期;%thread:線程名;%-5level:級別,從左顯示5個字符寬度;%msg:日志消息;%n:換行符-->??
  • ????????????<pattern>%d{yyyy-MM-dd?HH:mm:ss.SSS}?[%thread]?%-5level?%logger{50}?-?%msg%n</pattern>?????
  • ????????</encoder>???
  • ????????<!--日志文件最大的大小-->??
  • ???????<triggeringPolicy?class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">??
  • ?????????<MaxFileSize>10MB</MaxFileSize>??
  • ???????</triggeringPolicy>??
  • ????</appender>???
  • ???<!--?show?parameters?for?hibernate?sql?專為?Hibernate?定制?-->???
  • ????<logger?name="org.hibernate.type.descriptor.sql.BasicBinder"??level="TRACE"?/>????
  • ????<logger?name="org.hibernate.type.descriptor.sql.BasicExtractor"??level="DEBUG"?/>????
  • ????<logger?name="org.hibernate.SQL"?level="DEBUG"?/>????
  • ????<logger?name="org.hibernate.engine.QueryParameters"?level="DEBUG"?/>??
  • ????<logger?name="org.hibernate.engine.query.HQLQueryPlan"?level="DEBUG"?/>????
  • ??????
  • ????<!--myibatis?log?configure-->???
  • ????<logger?name="com.apache.ibatis"?level="TRACE"/>??
  • ????<logger?name="java.sql.Connection"?level="DEBUG"/>??
  • ????<logger?name="java.sql.Statement"?level="DEBUG"/>??
  • ????<logger?name="java.sql.PreparedStatement"?level="DEBUG"/>??
  • ??????
  • ????<!--?日志輸出級別?-->??
  • ????<root?level="INFO">??
  • ????????<appender-ref?ref="STDOUT"?/>??
  • ????????<appender-ref?ref="FILE"?/>??
  • ????</root>???
  • ?????<!--日志異步到數(shù)據(jù)庫?-->????
  • ????<appender?name="DB"?class="ch.qos.logback.classic.db.DBAppender">??
  • ????????<!--日志異步到數(shù)據(jù)庫?-->???
  • ????????<connectionSource?class="ch.qos.logback.core.db.DriverManagerConnectionSource">??
  • ???????????<!--連接池?-->???
  • ???????????<dataSource?class="com.mchange.v2.c3p0.ComboPooledDataSource">??
  • ??????????????<driverClass>com.mysql.jdbc.Driver</driverClass>??
  • ??????????????<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>??
  • ??????????????<user>root</user>??
  • ??????????????<password>root</password>??
  • ????????????</dataSource>??
  • ????????</connectionSource>??
  • ??</appender>??
  • </configuration>??


  • 在程序用引用Logback

    package?com.stu.system.action;
    import?org.slf4j.Logger;
    import?org.slf4j.LoggerFactory;

    public?class?BlogAction{
    ?????//定義一個全局的記錄器,通過LoggerFactory獲取
    ????private?final?static?Logger?logger?=?LoggerFactory.getLogger(BlogAction.class);
    ????public?static?void?main(String[]?args)?{
    ????????logger.info("logback?成功了");
    ????????logger.error("logback?成功了");
    ????}
    }

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的Logback介绍及入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。