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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

最实用的logback讲解(1)

發布時間:2024/9/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最实用的logback讲解(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1. pom依賴和logback.xml
  • 2. configuration屬性介紹
  • 3. logger和root屬性的使用
    • 3.1 addtivity屬性重點講解
  • 4. appender

logback,一個“可靠、通用、快速而又靈活的Java日志框架”,是springboot默認的日志框架。

1. pom依賴和logback.xml

  • pom依賴
  • <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version> </dependency> <!-- 引入以上依賴,會自動引入以下jarlogback-classic.x.x.x.jarlogback-core.x.x.x.jarslf4j-api-x.x.x.jar -->

    注意spring-boot-starter-parent里已集成logback,可直接使用。

  • logback.xml
  • 在工程resources目錄下建立logback.xml

    1.logback首先會試著查找logback.groovy文件;

    2.當沒有找到時,繼續試著查找logback-test.xml文件;

    3.當沒有找到時,繼續試著查找logback.xml文件;

    4.如果仍然沒有找到,則使用默認配置(打印到控制臺)。

    2. configuration屬性介紹

    <?xml version="1.0" encoding="UTF-8"?><configuration scan="true" scanPeriod="60 seconds" debug="false" packagingData="true"><!-- 用來設置上下文名稱,每個logger都關聯到logger上下文,默認上下文名稱為default。但可以使用<contextName>設置成其他名字,用于區分不同應用程序的記錄。一旦設置,不能修改。--><contextName>myApplicationName</contextName><!--用來定義變量值,它有兩個屬性name和value,通過<property>定義的值會被插入到logger上下文中,可以使用“${}”來使用變量。name: 變量的名稱,value: 的值時變量定義的值--><property name="LOG_HOME" value="${catalina.base}/logs/cloudTest/" /><!--獲取時間戳字符串,他有兩個屬性key和datePattern key: 標識此<timestamp> 的名字;datePattern: 設置將當前時間(解析配置文件的時間)轉換為字符串的模式,遵循 java.txt.SimpleDateFormat的格式。這個屬性很少使用 --><timestamp key="keyValue" datePattern="yyyy-MM-dd" /> <contextName>${keyValue}</contextName><!--其他配置略--> </configuration>
    • configuration

      scan 屬性設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true。
      scanPeriod: 設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan為true時,此屬性生效。默認的時間間隔為1分鐘。
      debug: 當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。
      packagingData:Logback可以包括它輸出的堆棧跟蹤行的每一行的打包數據。打包數據由JAR文件的名稱和版本組成,堆棧跟蹤行的類就是在JAR文件中創建的。默認為false

    • contextName

    • property
      可以定義一些變量,常用于定義日志文件輸出位置。

    • timestamp

    3. logger和root屬性的使用

    logger 是configuration的子節點,用來設置某一個包或者具體的某一個類的日志打印級別、以及指定appender。logger僅有一個name屬性,一個可選的level和一個可選的addtivity屬性。

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

    • level: 用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,還有一個特殊值INHERITED或者同義詞NULL,代表強制執行上級的級別。如果未設置此屬性,那么當前logger將會繼承上級的級別。

    • addtivity: 是否向上級logger傳遞打印信息。默認是true。

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

    root也是logger元素,但是它是根logger。只有一個level屬性,因為已經被命名為"root".

    • level: 用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能設置為INHERITED或者同義詞NULL。默認是DEBUG。

    • root可以包含零個或多個appender-ref元素,標識這個appender將會添加到這個logger。

    3.1 addtivity屬性重點講解

    下面重點說明addtivity的含義,例:

    java代碼:

    package com.jun.springdemo.controller;、 、 、private final Logger logger = LoggerFactory.getLogger(DemoController.class);@RequestMapping("/get")public String get(){logger.trace("======trace");logger.debug("======debug");logger.info("======info");logger.warn("======warn");logger.error("======error");return "222";}

    logback.xml配置文件

  • 只配置root
  • <configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 控制臺輸出 --><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{15}:%line] - %msg%n</pattern><charset>UTF-8</charset></encoder></appender><!-- 日志輸出級別 --><root level="info"><appender-ref ref="STDOUT" /></root></configuration>

    其中appender的配置表示打印到控制臺;
    <root level="INFO">將root的打印級別設置為“INFO”,指定了名字為“STDOUT”的appender。當執行DemoController類的get方法時,root將級別為“INFO”及大于“INFO”的日志信息交給已經配置好的名為“STDOUT”的appender處理,“STDOUT”appender將信息打印到控制臺;

    打印結果如下:

    2019-03-07 09:59:17.257 [http-nio-8080-exec-1] INFO [c.h.j.s.c.DemoController:22] - ======info 2019-03-07 09:59:17.257 [http-nio-8080-exec-1] WARN [c.h.j.s.c.DemoController:23] - ======warn 2019-03-07 09:59:17.257 [http-nio-8080-exec-1] ERROR [c.h.j.s.c.DemoController:24] - ======error
  • 帶有logger的配置,不指定級別,不指定appender
  • <configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 控制臺輸出 --><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{15}:%line] - %msg%n</pattern><charset>UTF-8</charset></encoder></appender><logger name="com.jun.springdemo.controller" ></logger><!-- 日志輸出級別 --><root level="debug"><appender-ref ref="STDOUT" /></root></configuration>

    <logger name="com.jun.springdemo.controller" />將控制com.jun.springdemo.controller包下的所有類的日志的打印,但是并沒用設置打印級別,所以繼承他的上級的日志級別“DEBUG”;沒有設置addtivity,默認為true,將此logger的打印信息向上級傳遞;沒有設置appender,此logger本身不打印任何信息。

    ? ? ? ?<root level="DEBUG">將root的打印級別設置為“DEBUG”,指定了名字為“STDOUT”的appender。
    當執行com.jun.springdemo.controller.DemoController類的get方法時,因為DemoController在包com.jun.springdemo.controller中,所以首先執行<logger name="com.jun.springdemo.controller" />,將級別為“DEBUG”及大于“DEBUG”的日志信息傳遞給root,本身并不打印;

    root接到下級傳遞的信息,交給已經配置好的名為“STDOUT”的appender處理,“STDOUT”appender將信息打印到控制臺;
    打印結果如下:

    2019-03-07 10:06:36.564 [http-nio-8080-exec-1] DEBUG [c.h.j.s.c.DemoController:21] - ======debug 2019-03-07 10:06:36.564 [http-nio-8080-exec-1] INFO [c.h.j.s.c.DemoController:22] - ======info 2019-03-07 10:06:36.564 [http-nio-8080-exec-1] WARN [c.h.j.s.c.DemoController:23] - ======warn 2019-03-07 10:06:36.564 [http-nio-8080-exec-1] ERROR [c.h.j.s.c.DemoController:24] - ======error
  • 帶有多個logger的配置,指定級別,指定appender
  • <configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 控制臺輸出 --><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{15}:%line] - %msg%n</pattern><charset>UTF-8</charset></encoder></appender><logger name="com.jun.springdemo.controller" ></logger><logger name="com.jun.springdemo.controller.DemoController" level="info" additivity="false"><appender-ref ref="STDOUT" /></logger><!-- 日志輸出級別 --><root level="error"><appender-ref ref="STDOUT" /></root></configuration>

    ? ? ? ?<logger name="com.jun.springdemo.controller" />將控制com.jun.springdemo.controller包下的所有類的日志的打印,但是并沒用設置打印級別,所以繼承他的上級的日志級別“error”;沒有設置addtivity,默認為true,將此logger的打印信息向上級傳遞;沒有設置appender,此logger本身不打印任何信息。

    ? ? ? ? <logger name="com.jun.springdemo.controller.DemoController" level="INFO" additivity="false">控制com.jun.springdemo.controller.DemoController類的日志打印,打印級別為“INFO”;additivity屬性為false,表示此logger的打印信息不再向上級傳遞,指定了名字為“STDOUT”的appender。

    <root level="ERROR">將root的打印級別設置為“ERROR”,指定了名字為“STDOUT”的appender。

    ? ? ? ?當執行com.jun.springdemo.controller.DemoController類的get方法時,先執行<logger name="com.jun.springdemo.controller.DemoController" level="INFO" additivity="false">,將級別為“INFO”及大于“INFO”的日志信息交給此logger指定的名為“STDOUT”的appender處理,在控制臺中打出日志,不再向logger的上級 <logger name="com.jun.springdemo.controller"/> 傳遞打印信息; 注意此時因為DemoController位于com.jun.springdemo.controller包下,所以 <logger name="com.jun.springdemo.controller"/>是<logger name="com.jun.springdemo.controller.DemoController" level="INFO" additivity="false">的上級!

    <logger name="com.jun.springdemo.controller"/>未接到任何打印信息,當然也不會給它的上級root傳遞任何打印信息;

    打印結果如下:

    2019-03-07 10:14:23.472 [http-nio-8080-exec-1] INFO [c.h.j.s.c.DemoController:22] - ======info 2019-03-07 10:14:23.474 [http-nio-8080-exec-1] WARN [c.h.j.s.c.DemoController:23] - ======warn 2019-03-07 10:14:23.475 [http-nio-8080-exec-1] ERROR [c.h.j.s.c.DemoController:24] - ======error

    ? ? ? ?如果將<logger name="com.jun.springdemo.controller.DemoController" level="INFO" additivity="false">修改為 <logger name="com.jun.springdemo.controller.DemoController" level="INFO" additivity="true">那打印結果將是什么呢?

    ? ? ? ?沒錯,日志打印了兩次,想必大家都知道原因了,因為打印信息向上級傳遞,logger本身打印一次, <logger name="com.jun.springdemo.controller"/>接到后本身因為沒有設置appender不會打印但向上繼續傳遞給root,root會再打印一次。

    2019-03-07 11:39:17.131 [http-nio-8080-exec-1] INFO [c.h.j.s.c.DemoController:22] - ======info 2019-03-07 11:39:17.131 [http-nio-8080-exec-1] INFO [c.h.j.s.c.DemoController:22] - ======info 2019-03-07 11:39:17.134 [http-nio-8080-exec-1] WARN [c.h.j.s.c.DemoController:23] - ======warn 2019-03-07 11:39:17.134 [http-nio-8080-exec-1] WARN [c.h.j.s.c.DemoController:23] - ======warn 2019-03-07 11:39:17.134 [http-nio-8080-exec-1] ERROR [c.h.j.s.c.DemoController:24] - ======error 2019-03-07 11:39:17.134 [http-nio-8080-exec-1] ERROR [c.h.j.s.c.DemoController:24] - ======error

    ? ? ? ?此處可能令人困惑, <root>日志級別不是error么,怎么還會打印info和warn級別的日志?這里是因為日志信息向上傳遞后,日志級別會由下級的level來決定!所以即使info日志也會打印!! 因此注意一般實際使用中additivity常常設置為false

    4. appender

    見最實用的logback講解(2)

    總結

    以上是生活随笔為你收集整理的最实用的logback讲解(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。