国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - logback的使用和logback.xml詳解(小結)

logback的使用和logback.xml詳解(小結)

2021-06-10 15:18行走在云端的愚公 Java教程

Logback是由log4j創始人設計的另一個開源日志組件,這篇文章主要介紹了logback的使用和logback.xml詳解(小結),非常具有實用價值,需要的朋友可以參考下

一、logback的介紹

logback是由log4j創始人設計的另一個開源日志組件,官方網站: http://logback.qos.ch。它當前分為下面下個模塊:

  • logback-core:其它兩個模塊的基礎模塊
  • logback-classic:它是log4j的一個改良版本,同時它完整實現了slf4j api使你可以很方便地更換成其它日志系統如log4j或jdk14 logging
  • logback-access:訪問模塊與servlet容器集成提供通過http來訪問日志的功能

二、logback取代log4j的理由:

1.更快的實現:logback的內核重寫了,在一些關鍵執行路徑上性能提升10倍以上。而且logback不僅性能提升了,初始化內存加載也更小了。

2.非常充分的測試:logback經過了幾年,數不清小時的測試。logback的測試完全不同級別的。

3.logback-classic非常自然實現了slf4j:logback-classic實現了slf4j。在使用slf4j中,你都感覺不到logback-classic。而且因為logback-classic非常自然地實現了slf4j , 所 以切換到log4j或者其他,非常容易,只需要提供成另一個jar包就ok,根本不需要去動那些通過slf4japi實現的代碼。

4.非常充分的文檔 官方網站有兩百多頁的文檔。

5.自動重新加載配置文件,當配置文件修改了,logback-classic能自動重新加載配置文件。掃描過程快且安全,它并不需要另外創建一個掃描線程。這個技術充分保證了應用程序能跑得很歡在jee環境里面。

6.lilith是log事件的觀察者,和log4j的chainsaw類似。而lilith還能處理大數量的log數據 。

7.謹慎的模式和非常友好的恢復,在謹慎模式下,多個fileappender實例跑在多個jvm下,能 夠安全地寫道同一個日志文件。rollingfileappender會有些限制。logback的fileappender和它的子類包括 rollingfileappender能夠非常友好地從i/o異常中恢復。

8.配置文件可以處理不同的情況,開發人員經常需要判斷不同的logback配置文件在不同的環境下(開發,測試,生產)。而這些配置文件僅僅只有一些很小的不同,可以通過,和來實現,這樣一個配置文件就可以適應多個環境。

9.filters(過濾器)有些時候,需要診斷一個問題,需要打出日志。在log4j,只有降低日志級別,不過這樣會打出大量的日志,會影響應用性能。在logback,你可以繼續 保持那個日志級別而除掉某種特殊情況,如alice這個用戶登錄,她的日志將打在debug級別而其他用戶可以繼續打在warn級別。要實現這個功能只需加4行xml配置。可以參考mdcfilter 。

10.siftingappender(一個非常多功能的appender):它可以用來分割日志文件根據任何一個給定的運行參數。如,siftingappender能夠區別日志事件跟進用戶的session,然后每個用戶會有一個日志文件。

11.自動壓縮已經打出來的log:rollingfileappender在產生新文件的時候,會自動壓縮已經打出來的日志文件。壓縮是個異步過程,所以甚至對于大的日志文件,在壓縮過程中應用不會受任何影響。

12.堆棧樹帶有包版本:logback在打出堆棧樹日志時,會帶上包的數據。

13.自動去除舊的日志文件:通過設置timebasedrollingpolicy或者sizeandtimebasedfnatp的maxhistory屬性,你可以控制已經產生日志文件的最大數量。如果設置maxhistory 12,那那些log文件超過12個月的都會被自動移除。

三、logback的配置介紹

logger、appender及layout

logger作為日志的記錄器,把它關聯到應用的對應的context上后,主要用于存放日志對象,也可以定義日志類型、級別。

appender主要用于指定日志輸出的目的地,目的地可以是控制臺、文件、遠程套接字服務器、 mysql、postresql、 oracle和其他數據庫、 jms和遠程unix syslog守護進程等。 

layout 負責把事件轉換成字符串,格式化的日志信息的輸出。

logger context

各個logger 都被關聯到一個 loggercontext,loggercontext負責制造logger,也負責以樹結構排列各logger。其他所有logger也通過org.slf4j.loggerfactory 類的靜態方法getlogger取得。 getlogger方法以 logger名稱為參數。用同一名字調用loggerfactory.getlogger 方法所得到的永遠都是同一個logger對象的引用。

有效級別及級別的繼承

logger 可以被分配級別。級別包括:trace、debug、info、warn 和 error,定義于ch.qos.logback.classic.level類。如果 logger沒有被分配級別,那么它將從有被分配級別的最近的祖先那里繼承級別。root logger 默認級別是 debug。

打印方法與基本的選擇規則

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

該規則是 logback 的核心。級別排序為: trace < debug < info < warn < error

四、logback的默認配置

 如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默認地會調用basicconfigurator ,創建一個最小化配置。最小化配置由一個關聯到根 logger 的consoleappender 組成。輸出用模式為%d{hh:mm:ss.sss} [%thread] %-5level %logger{36} - %msg%n 的 patternlayoutencoder 進行格式化。root logger 默認級別是 debug。

logback的配置文件

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

logback默認配置的步驟
1.嘗試在 classpath下查找文件logback-test.xml;
2.如果文件不存在,則查找文件logback.xml;
3.如果兩個文件都不存在,logback用basicconfigurator自動對自己進行配置,這會導致記錄輸出到控制臺。

五、logback.xml常用配置詳解

logback的使用和logback.xml詳解(小結)

(1) 根節點<configuration>,包含下面三個屬性:

  • scan: 當此屬性設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true。
  • scanperiod: 設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan為true時,此屬性生效。默認的時間間隔為1分鐘。
  • debug: 當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。

例如:

?
1
2
3
<configuration scan="true" scanperiod="60 seconds" debug="false">
   <!--其他配置省略-->
</configuration>

(2) 子節點<contextname>:用來設置上下文名稱,每個logger都關聯到logger上下文,默認上下文名稱為default。但可以使用<contextname>設置成其他名字,用于區分不同應用程序的記錄。一旦設置,不能修改。

例如:

?
1
2
3
4
<configuration scan="true" scanperiod="60 seconds" debug="false">
   <contextname>myappname</contextname>
   <!--其他配置省略-->
</configuration>

(3) 子節點<property> :用來定義變量值,它有兩個屬性name和value,通過<property>定義的值會被插入到logger上下文中,可以使“${}”來使用變量。

  • name: 變量的名稱
  • value: 的值時變量定義的值

例如:

?
1
2
3
4
5
<configuration scan="true" scanperiod="60 seconds" debug="false">
   <property name="app_name" value="myappname" />
   <contextname>${app_name}</contextname>
   <!--其他配置省略-->
</configuration>

(4) 子節點<timestamp>:獲取時間戳字符串,他有兩個屬性key和datepattern

    key: 標識此<timestamp> 的名字;
     datepattern: 設置將當前時間(解析配置文件的時間)轉換為字符串的模式,遵循java.txt.simpledateformat的格式。
   例如:

?
1
2
3
4
5
<configuration scan="true" scanperiod="60 seconds" debug="false">
      <timestamp key="bysecond" datepattern="yyyymmdd't'hhmmss"/>
      <contextname>${bysecond}</contextname>
      <!-- 其他配置省略-->
    </configuration>

(5) 子節點<appender>:負責寫日志的組件,它有兩個必要屬性name和class。name指定appender名稱,class指定appender的全限定名

5.1、consoleappender 把日志輸出到控制臺,有以下子節點:

  • <encoder>:對日志進行格式化。(具體參數稍后講解 )
  • <target>:字符串system.out(默認)或者system.err(區別不多說了)

例如:

?
1
2
3
4
5
6
7
8
9
10
11
<configuration>
   <appender name="stdout" class="ch.qos.logback.core.consoleappender">
      <encoder>
         <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
      </encoder>
   </appender>
 
   <root level="debug">
      <appender-ref ref="stdout" />
   </root>
</configuration>

上述配置表示把>=debug級別的日志都輸出到控制臺

5.2、fileappender:把日志添加到文件,有以下子節點:

  • <file>:被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建,沒有默認值。
  • <append>:如果是 true,日志被追加到文件結尾,如果是 false,清空現存文件,默認是true。
  • <encoder>:對記錄事件進行格式化。(具體參數稍后講解 )
  • <prudent>:如果是 true,日志會被安全的寫入文件,即使其他的fileappender也在向此文件做寫入操作,效率低,默認是 false。

例如:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<configuration>
      <appender name="file" class="ch.qos.logback.core.fileappender">
        <file>testfile.log</file>
        <append>true</append>
        <encoder>
          <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
      </appender>
 
      <root level="debug">
      <appender-ref ref="file" />
      </root>
    </configuration>

上述配置表示把>=debug級別的日志都輸出到testfile.log

5.3、rollingfileappender:滾動記錄文件,先將日志記錄到指定文件,當符合某個條件時,將日志記錄到其他文件。有以下子節點:

<file>:被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建,沒有默認值。

<append>:如果是 true,日志被追加到文件結尾,如果是 false,清空現存文件,默認是true。 

<rollingpolicy>:當發生滾動時,決定rollingfileappender的行為,涉及文件移動和重命名。屬性class定義具體的滾動策略類

class="ch.qos.logback.core.rolling.timebasedrollingpolicy": 最常用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責出發滾動。有以下子節點:

<filenamepattern>:必要節點,包含文件名及“%d”轉換符,“%d”可以包含一個java.text.simpledateformat指定的時間格式,如:%d{yyyy-mm}。

 如果直接使用 %d,默認格式是 yyyy-mm-dd。rollingfileappender的file字節點可有可無,通過設置file,可以為活動文件和歸檔文件指定不同位置,當前日志總是記錄到file指定的文件(活動文件),活動文件的名字不會改變;

 如果沒設置file,活動文件的名字會根據filenamepattern 的值,每隔一段時間改變一次。“/”或者“\”會被當做目錄分隔符。 

<maxhistory>:可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件。假設設置每個月滾動,且<maxhistory>是6,則只保存最近6個月的文件,刪除之前的舊文件。注意,刪除舊文件是,那些為了歸檔而創建的目錄也會被刪除。

class="ch.qos.logback.core.rolling.sizebasedtriggeringpolicy": 查看當前活動文件的大小,如果超過指定大小會告知rollingfileappender 觸發當前活動文件滾動。只有一個節點:

<maxfilesize>:這是活動文件的大小,默認值是10mb。

<prudent>:當為true時,不支持fixedwindowrollingpolicy。支持timebasedrollingpolicy,但是有兩個限制,1不支持也不允許文件壓縮,2不能設置file屬性,必須留空。

<triggeringpolicy >: 告知 rollingfileappender 合適激活滾動。

class="ch.qos.logback.core.rolling.fixedwindowrollingpolicy" 根據固定窗口算法重命名文件的滾動策略。有以下子節點:

<minindex>:窗口索引最小值

<maxindex>:窗口索引最大值,當用戶指定的窗口過大時,會自動將窗口設置為12。

<filenamepattern>:必須包含“%i”例如,假設最小值和最大值分別為1和2,命名模式為 mylog%i.log,會產生歸檔文件mylog1.log和mylog2.log。還可以指定文件壓縮選項,例如,mylog%i.log.gz 或者 沒有log%i.log.zip

例如:         

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<configuration>
          <appender name="file" class="ch.qos.logback.core.rolling.rollingfileappender">
            <rollingpolicy class="ch.qos.logback.core.rolling.timebasedrollingpolicy">
              <filenamepattern>logfile.%d{yyyy-mm-dd}.log</filenamepattern>
              <maxhistory>30</maxhistory>
            </rollingpolicy>
            <encoder>
              <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
            </encoder>
          </appender>
 
          <root level="debug">
            <appender-ref ref="file" />
          </root>
        </configuration>

備注:上述配置表示每天生成一個日志文件,保存30天的日志文件。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<configuration>
          <appender name="file" class="ch.qos.logback.core.rolling.rollingfileappender">
            <file>test.log</file>
 
            <rollingpolicy class="ch.qos.logback.core.rolling.fixedwindowrollingpolicy">
              <filenamepattern>tests.%i.log.zip</filenamepattern>
              <minindex>1</minindex>
              <maxindex>3</maxindex>
            </rollingpolicy>
 
            <triggeringpolicy class="ch.qos.logback.core.rolling.sizebasedtriggeringpolicy">
              <maxfilesize>5mb</maxfilesize>
            </triggeringpolicy>
            <encoder>
              <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
            </encoder>
          </appender>
 
          <root level="debug">
            <appender-ref ref="file" />
          </root>
        </configuration>

備注:上述配置表示按照固定窗口模式生成日志文件,當文件大于20mb時,生成新的日志文件。窗口大小是1到3,當保存了3個歸檔文件后,將覆蓋最早的日志。

<encoder>:對記錄事件進行格式化。負責兩件事,一是把日志信息轉換成字節數組,二是把字節數組寫入到輸出流。
patternlayoutencoder 是唯一有用的且默認的encoder ,有一個<pattern>節點,用來設置日志的輸入格式。使用“%”加“轉換符”方式,如果要輸出“%”,則必須用“\”對“\%”進行轉義。

5.4、還有socketappender、smtpappender、dbappender、syslogappender、siftingappender,并不常用,這里就不詳解了。

 大家可以參考官方文檔(http://logback.qos.ch/documentation.html),還可以編寫自己的appender。

(6)子節點<loger>:用來設置某一個包或具體的某一個類的日志打印級別、以及指定<appender>。<loger>僅有一個name屬性,一個可選的level和一個可選的addtivity屬性。

 可以包含零個或多個<appender-ref>元素,標識這個appender將會添加到這個loger

name: 用來指定受此loger約束的某一個包或者具體的某一個類。

level: 用來設置打印級別,大小寫無關:trace, debug, info, warn, error, all和off,還有一個特俗值inherited或者同義詞null,代表強制執行上級的級別。 如果未設置此屬性,那么當前loger將會繼承上級的級別。

addtivity: 是否向上級loger傳遞打印信息。默認是true。同<loger>一樣,可以包含零個或多個<appender-ref>元素,標識這個appender將會添加到這個loger。

(7)子節點<root>:它也是<loger>元素,但是它是根loger,是所有<loger>的上級。只有一個level屬性,因為name已經被命名為"root",且已經是最上級了。

level: 用來設置打印級別,大小寫無關:trace, debug, info, warn, error, all和off,不能設置為inherited或者同義詞null。 默認是debug。

六、常用loger配置

?
1
2
3
4
5
6
7
8
9
10
11
12
<!-- 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"/>

七、demo

(1)添加依賴包logback使用需要和slf4j一起使用,所以總共需要添加依賴的包有slf4j-api

logback使用需要和slf4j一起使用,所以總共需要添加依賴的包有slf4j-api.jar,logback-core.jar,logback-classic.jar,logback-access.jar這個暫時用不到所以不添加依賴了,maven配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<properties>
    <project.build.sourceencoding>utf-8</project.build.sourceencoding>
    <logback.version>1.1.7</logback.version>
    <slf4j.version>1.7.21</slf4j.version>
  </properties>
 
  <dependencies>
    <dependency>
      <groupid>org.slf4j</groupid>
      <artifactid>slf4j-api</artifactid>
      <version>${slf4j.version}</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupid>ch.qos.logback</groupid>
      <artifactid>logback-core</artifactid>
      <version>${logback.version}</version>
    </dependency>
    <dependency>
      <groupid>ch.qos.logback</groupid>
      <artifactid>logback-classic</artifactid>
      <version>${logback.version}</version>
      </dependency>
  </dependencies>

(2)logback.xml配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?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>
<!--日志文件保留天數-->
<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>
 
<!-- 日志輸出級別 -->
<root level="info">
<appender-ref ref="stdout" />
</root>
</configuration>

(3)java代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
/**
  * hello world!
  */
  public class app {
 
  private final static logger logger = loggerfactory.getlogger(app.class);
 
    public static void main(string[] args) {
      logger.info("logback 成功了");
      logger.error("logback 成功了");
      logger.debug("logback 成功了");
    }
  }

(4)輸出

logback的使用和logback.xml詳解(小結)

八、總結

logback的配置,需要配置輸出源appender,打日志的loger(子節點)和root(根節點),實際上,它輸出日志是從子節點開始,子節點如果有輸出源直接輸入,如果無,判斷配置的addtivity,是否像上級傳遞,即是否向root傳遞,傳遞則采用root的輸出源,否則不輸出日志。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/warking/p/5710303.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美精品偷拍 | 中文字幕av在线播放 | 国产一区二区三区高清 | 天天色天天色 | 久久久精品视频免费观看 | 中文字幕在线观看一区二区三区 | 精久久| 久久久久久av | 亚洲男人的天堂网站 | 激情欧美一区二区三区中文字幕 | 综合精品久久久 | 久久极品| 综合久久综合久久 | 1区在线| 国产精品免费久久久久久久久 | 国产精品毛片久久久 | 中文字幕欧美日韩 | 亚洲精品国产a | 最近的中文字幕在线看视频 | 日韩精品免费在线视频 | 91在线 | 91看片| 黄色片子免费观看 | 国产福利一区二区三区四区 | 欧美日韩一区二区三区在线观看 | www.99久| 欧美一级在线 | 成人片免费看 | 欧美日韩精品在线观看 | 日韩欧美国产一区二区三区 | 夜夜操操 | 日韩精品影院 | 国产在线一区二区三区 | 成人黄色短视频在线观看 | 亚洲午夜成激人情在线影院 | www.一区二区 | 亚洲国产一级毛片 | 国产目拍亚洲精品99久久精品 | 伊人五月 | 综合婷婷 | 午夜成人免费电影 |