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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot笔记:SpringBoot2.3集成Logback日志组件配置

發布時間:2025/3/19 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot笔记:SpringBoot2.3集成Logback日志组件配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • Logback簡介
    • 簡介
    • 日志級別
    • 日志分類
  • Logback使用
    • 添加依賴
    • 配置Logback
    • Logback參數解釋
      • 1、根節點configuration包含屬性
      • 2、根節點configuration的子節點
      • 3、設置上下文名稱
        • 3.1、默認方式contextName
        • 3.2、默認方式property
        • 3.3、獲取時間戳字符串:timestamp
      • 4、設置loger、root
      • 5、舉例說明
        • 5.1、只配置root
        • 5.2、帶有logger的配置,不指定界別,不指定appender
        • 5.3、帶有多個logger的配置,指定級別,指定appender

Logback簡介

簡介

logback是繼log4j后的又一個日志框架,logback是springboot自帶的日志框架,logback以嚴格的日志級別區分不同級別的日志(其他日志都是繼承上一級的日志級別,例如:log4j2,log4j都是繼承更高級別的日志),logback分為三個模塊,logback-core,logback-classic,logback-access。

logback-core:logback-core是logback的核心模塊,是logback-classic和的logback-access的基礎。
logback-classic:實現了 slf4j API,配合 slf4j 使用,可以方便的切換其他日志框架。
logback-access:與Servlet容器(如Tomcat和Jetty)集成,提供了 HTTP 訪問日志接口。

日志級別

ALL > DEBUG > INFO > WARN > ERROR > OFF 級別越低,輸出日志越多,最低級別ALL,所有都輸出。最高級別是OFF(關閉),什么都不輸出。

  • ALL:所有都輸出
  • DEBUG:輸出DEBUG及后面所有日志
  • INFO:輸出INFO及后面所有日志
  • WARN:輸出WARN及后面所有日志
  • ERROR:只輸出ERROR級別日志

日志分類

  • 項目根日志:全局日志,一個項目只有一個根日志
  • 項目子日志:包級別的日志,一個項目可以有多個子日志。

沒有特別指明的地方默認都用的是根日志規則,有子日志的地方用的是子日志的規則

Logback使用

添加依賴

對于一個web應用,只需要添加 spring-boot-starter-web依賴,因為它依賴了logging starter

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>

springboot默認集成logback,不用額外引入jar包
logback延用了log4j所有語法和規則,熟悉log4j的話學習logback更加輕松

配置Logback

配置只需要在resources下添加logback-spring.xml配置文件就可以了。內容可以參考以下日志模板:

<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"><!-- 定義日志組件上下文路徑名,用于區分不同應用程序的記錄 --><contextName>springboot-logback</contextName><!--定義日志文件的存儲地址目錄 --><property name="LOG_HOME" value="./logs"/><!-- 控制臺輸出的配置 --><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}:%L - %msg%n</pattern></encoder></appender><!-- 每天生成一個.log日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件輸出的文件名,我們使用的是路徑${LOG_HOME}+文件名(文件名里面加了日期) --><FileNamePattern>${LOG_HOME}/app.%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}:%L - %msg%n</pattern></encoder><!--日志文件最大的大小,默認是10MB,超過這個就會備份為一個壓縮文件 --><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender><!-- 每天生成一個html格式的日志 --><appender name="HtmlFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件輸出的文件名 --><FileNamePattern>${LOG_HOME}/app.%d{yyyy-MM-dd}.html</FileNamePattern><!--日志文件保留天數 --><MaxHistory>30</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="ch.qos.logback.classic.html.HTMLLayout"><pattern>%p%d%msg%M%F{32}%L</pattern></layout></encoder><!--日志文件最大的大小 --><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender><!-- 生成html格式的WARN級別日志 --><appender name="WARNHtmlFile" class="ch.qos.logback.core.FileAppender"><!-- 過濾器,只記錄WARN級別的日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>WARN</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="ch.qos.logback.classic.html.HTMLLayout"><pattern>%p%d%msg%M%F{32}%L</pattern></layout></encoder><file>${LOG_HOME}/WARN-log.html</file></appender><!-- 根日志輸出級別 --><root level="INFO"><appender-ref ref="STDOUT"/><appender-ref ref="FILE"/><appender-ref ref="HtmlFile"/></root><!--自定義日志級別配置,指定我們項目都是debug級別 --><logger name="com.example.logback" level="debug"/> </configuration>

Logback參數解釋

1、根節點configuration包含屬性

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

參考配置如下:

<configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 其他配置省略--> </configuration>

2、根節點configuration的子節點

3、設置上下文名稱

3.1、默認方式contextName

每個logger都關聯到logger上下文,默認上下文名稱為“default”。但可以使用<contextName>設置成其他名字,用于區分不同應用程序的記錄。一旦設置,不能修改。

<configuration scan="true" scanPeriod="60 seconds" debug="false"> <contextName>springboot-logback</contextName> <!-- 其他配置省略--> </configuration>

3.2、默認方式property

用來定義變量值的標簽,<property> 有兩個屬性,name和value;其中name的值是變量的名稱,value的值時變量定義的值。通過<property>定義的值會被插入到logger上下文中。定義變量后,可以使“${}”來使用變量。
例如使用<property>定義上下文名稱,然后在<contentName>設置logger上下文時使用。

<configuration scan="true" scanPeriod="60 seconds" debug="false"> <property name="APP_Name" value="springboot-logback" /> <contextName>${APP_Name}</contextName> <!-- 其他配置省略--> </configuration>

3.3、獲取時間戳字符串:timestamp

兩個屬性 key:標識此<timestamp> 的名字;datePattern:設置將當前時間(解析配置文件的時間)轉換為字符串的模式,遵循java.txt.SimpleDateFormat的格式。
例如將解析配置文件的時間作為上下文名稱:

<configuration scan="true" scanPeriod="60 seconds" debug="false"> <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/> <contextName>${bySecond}</contextName> <!-- 其他配置省略--> </configuration>

4、設置loger、root

  • 設置loger:用來設置某一個包或者具體的某一個類的日志打印級別、以及指定<appender>。<logger>僅有一個name屬性,一個可選的level和一個可選的addtivity屬性。
    name:用來指定受此loger約束的某一個包或者具體的某一個類。
    level:用來設置打印級別(日志級別),大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,還有一個特俗值INHERITED或者同義詞NULL,代表強制執行上級的級別。如果未設置此屬性,那么當前loger將會繼承上級的級別。
    addtivity:是否向上級loger傳遞打印信息。默認是true。
    可以包含零個或多個元素,標識這個appender將會添加到這個loger。

  • 設置root:也是<logger>元素,但是它是根logger。只有一個level屬性,應為已經被命名為"root".
    level:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能設置為INHERITED或者同義詞NULL。默認是DEBUG。

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

    5、舉例說明

    TestController.java測試類:

    package com.example.logback;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class TestController {/*** 獲取一個日志組件*/Logger logger = LoggerFactory.getLogger(getClass());@GetMapping("/helloLogback")public String testDemo() {logger.trace("hello trace");logger.debug("hello debug");logger.info("hello info");logger.warn("hello warn");logger.error("hello error");return "Hello Logback!";} }

    5.1、只配置root

    logback-spring.xml配置內容如下:

    <?xml version="1.0" encoding="UTF-8"?> <configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- encoder 默認配置為PatternLayoutEncoder --><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="INFO"><appender-ref ref="STDOUT"/></root> </configuration>

    其中appender的配置表示打印到控制臺,<root level=“INFO”>將root的打印級別設置為“INFO”,指定了名字為“STDOUT”的appender。

    當執行/helloLogback方法時,root將級別為“INFO”及大于“INFO”的日志信息交給已經配置好的名為“STDOUT”的appender處理,“STDOUT”appender將信息打印到控制臺;打印測試結果:

    08:48:57.007 [http-nio-8080-exec-2] INFO o.a.c.c.C.[.[.[/logback-demo] - Initializing Spring DispatcherServlet 'dispatcherServlet' 08:48:57.007 [http-nio-8080-exec-2] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' 08:48:57.014 [http-nio-8080-exec-2] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 7 ms 08:49:11.080 [http-nio-8080-exec-3] INFO com.example.logback.TestController - hello info 08:49:11.080 [http-nio-8080-exec-3] WARN com.example.logback.TestController - hello warn 08:49:11.080 [http-nio-8080-exec-3] ERROR com.example.logback.TestController - hello error

    5.2、帶有logger的配置,不指定界別,不指定appender

    logback-spring.xml配置如下所示:

    <?xml version="1.0" encoding="UTF-8"?> <configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- encoder 默認配置為PatternLayoutEncoder --><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 這個是測試類TestController所在的包名 --><logger name="com.example.logback"/><!-- 注意這里將級別調整為DEGUGE級別 --><root level="DEBUGE"><appender-ref ref="STDOUT"/></root> </configuration>
  • 其中appender的配置表示打印到控制臺;
  • <logger name=“logback” />將控制com.example.logback包下的所有類的日志的打印,但是并沒用設置打印級別,所以繼承他的上級<root>的日志級別“DEBUG”;
  • 沒有設置addtivity,默認為true,將此logger的打印信息向上級傳遞;
  • 沒有設置appender,此logger本身不打印任何信息。
  • <root level=“DEBUG”>將root的打印級別設置為“DEBUG”,指定了名字為“STDOUT”的appender。
  • 當執行/helloLogback方法時,因為其在com.example.logback包中,所以首先執行<logger name=“com.example.logback”/>,將級別為“DEBUG”及大于“DEBUG”的日志信息傳遞給root,本身并不打印;
    root接到下級傳遞的信息,交給已經配置好的名為“STDOUT”的appender處理,“STDOUT”appender將信息打印到控制臺;打印結果如下所示:

    09:09:10.489 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet - GET "/logback-demo/helloLogback", parameters={} 09:09:10.490 [http-nio-8080-exec-3] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to com.example.logback.TestController#testDemo() 09:09:10.490 [http-nio-8080-exec-3] DEBUG com.example.logback.TestController - hello debug 09:09:10.490 [http-nio-8080-exec-3] INFO com.example.logback.TestController - hello info 09:09:10.490 [http-nio-8080-exec-3] WARN com.example.logback.TestController - hello warn 09:09:10.490 [http-nio-8080-exec-3] ERROR com.example.logback.TestController - hello error 09:09:10.491 [http-nio-8080-exec-3] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Using 'text/html', given [text/html, application/xhtml+xml, image/avif, image/webp, image/apng, application/xml;q=0.9, application/signed-exchange;v=b3;q=0.9, */*;q=0.8] and supported [text/plain, */*, text/plain, */*, application/json, application/*+json, application/json, application/*+json] 09:09:10.491 [http-nio-8080-exec-3] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Writing ["Hello Logback!"] 09:09:10.491 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet - Completed 200 OK

    5.3、帶有多個logger的配置,指定級別,指定appender

    logback-spring.xml配置如下:

    <?xml version="1.0" encoding="UTF-8"?> <configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- encoder 默認配置為PatternLayoutEncoder --><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 將spring框架的日志界別調整為ERROR級別,ERROR級別以下的不打印--><logger name="org.springframework" level="ERROR"/><!-- 這個是測試類TestController所在類名,指定WRAN以上級別日志輸出,并且不向上傳遞,以免重復打印 --><logger name="com.example.logback.TestController" level="WARN" additivity="false"><appender-ref ref="STDOUT"/></logger><!-- 這個是測試類Test2Controller所在類名,內容和TestController一模一樣 --><logger name="com.example.logback.Test2Controller"/><!-- 注意這里將級別調整為DEGUGE級別 --><root level="DEBUGE"><appender-ref ref="STDOUT"/></root> </configuration>

    對于 <logger name=“com.example.logback.Test2Controller”/>解釋:

  • <logger name=“com.example.logback.Test2Controller”/>控制Test2Controller日志的打印,但是并沒用設置打印級別,所以繼承他的上級<root>的日志級別“DEBUG”;
  • 沒有設置addtivity,默認為true,將此logger的打印信息向上級傳遞;
  • 沒有設置appender,此logger本身不打印任何信息。
  • 對于<logger name=“com.example.logback.TestController” level=“WARN” additivity=“false”>解釋:

  • <logger name=“com.example.logback.TestController” level=“WARN” additivity=“false”>控制TestController類的日志打印,打印級別為“WARN”;
  • additivity屬性為false,表示此loger的打印信息不再向上級傳遞,
  • 指定了名字為“STDOUT”的appender。
  • 最后,<root level=“DEBUG”>將root的打印級別設置為“DEBUG”,指定了名字為“STDOUT”的appender。

    總結日志打印信息
    當執行com.example.logback.TestController里面的方法時,先執行<logger name=“com.example.logback.TestController” level=“WARN” additivity=“false”>,將級別為“WARN”及大于“WARN”的日志信息交給此logger指定的名為“STDOUT”的appender處理,在控制臺中打出日志,不再向次logger的上級 傳遞打印信息;

    訪問http://localhost:8080/logback-demo/helloLogback,日志打印結果:

    09:38:30.571 [http-nio-8080-exec-1] INFO o.a.c.c.C.[.[.[/logback-demo] - Initializing Spring DispatcherServlet 'dispatcherServlet' 09:38:30.600 [http-nio-8080-exec-1] WARN com.example.logback.TestController - hello warn 09:38:30.600 [http-nio-8080-exec-1] ERROR com.example.logback.TestController - hello error

    訪問http://localhost:8080/logback-demo/helloLogback2,日志打印結果:

    09:39:58.732 [http-nio-8080-exec-2] DEBUG com.example.logback.Test2Controller - hello debug 09:39:58.732 [http-nio-8080-exec-2] INFO com.example.logback.Test2Controller - hello info 09:39:58.732 [http-nio-8080-exec-2] WARN com.example.logback.Test2Controller - hello warn 09:39:58.732 [http-nio-8080-exec-2] ERROR com.example.logback.Test2Controller - hello error

    以上可以看出logback控制日志的粒度是非常細的。

    如果將沒有設置addtivity值修改為true,會發生什么?這個是控制日志輸出的位置的,推測會向自己的logger打印一份,同時向上一級root傳遞一份,也就是打印兩次日志,驗證一下:

    <!-- 這個是測試類TestController所在類名,指定WRAN以上級別日志輸出,并且不向上傳遞,以免重復打印 --><logger name="com.example.logback.TestController" level="WARN" additivity="true"><appender-ref ref="STDOUT"/></logger>

    訪問http://localhost:8080/logback-demo/helloLogback,日志打印結果:

    09:43:38.805 [http-nio-8080-exec-1] INFO o.a.c.c.C.[.[.[/logback-demo] - Initializing Spring DispatcherServlet 'dispatcherServlet' 09:43:38.836 [http-nio-8080-exec-1] WARN com.example.logback.TestController - hello warn 09:43:38.836 [http-nio-8080-exec-1] WARN com.example.logback.TestController - hello warn 09:43:38.836 [http-nio-8080-exec-1] ERROR com.example.logback.TestController - hello error 09:43:38.836 [http-nio-8080-exec-1] ERROR com.example.logback.TestController - hello error

    參考其他:
    logback 配置詳解(二)——appender(https://www.cnblogs.com/cb0327/p/5770794.html)
    Springboot集成logback,控制臺日志打印兩次,并且是不同的線程打印的(http://shangdixinxi.com/detail-1501889.html)

    總結

    以上是生活随笔為你收集整理的SpringBoot笔记:SpringBoot2.3集成Logback日志组件配置的全部內容,希望文章能夠幫你解決所遇到的問題。

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