亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot日志框架如何使用

 更新時間:2021年01月26日 10:37:35   作者:Mark-Chou  
這篇文章主要介紹了SpringBoot日志框架如何使用,幫助大家更好的理解和使用springboot日志框架,感興趣的朋友可以了解下

不管是開發(fā)過程中調試還是線上問題的定位追蹤,日志都發(fā)揮著及其重要的作用。平時,我們會用System.out.println()打印一些信息到控制臺,我們可以使用該語句輸出日志,但是System.out會增加資源的消耗,所以最好使用日志框架打印日志信息。

Java中的日志框架有JCL、Jboss-logging、slf4j、logback、log4j、log4j2等等,其中JCL、Jboss-logging、slf4j屬于日志門面(日志的抽象),logback、log4j、log4j2是日志框架的具體實現(xiàn)。阿里巴巴開發(fā)規(guī)范強制要求使用日志的門面而不要直接使用日志系統(tǒng)的API。

【強制】應用中不可直接使用日志系統(tǒng)(Log4j、Logback)中的 API,而應依賴使用日志框架(SLF4J、JCL--Jakarta Commons Logging)中的 API,使用門面模式的日志框架,有利于維護和各個類的日志處理方式統(tǒng)一。

日志門面不是日志解決方案,它只服務于各種各樣的日志系統(tǒng),這就允許最終用戶在部署應用時可以隨意使用其所希望的日志系統(tǒng)。也就是說如果開始使用slf4j+logback記錄日志,則項目會按logback的風格打印日志,后期如果我們想更改為log4j風格的輸出,則只需將logback替換為log4j即可,不需改變項目中的任何代碼。

slf4j+logback也是SpringBoot中默認整合的日志框架。

如何使用

public class LoggerService {
  private static final Logger logger = LoggerFactory.getLogger(LoggerService.class);

  public void printLog() {
      logger.trace("trace日志……");
      logger.debug("debug日志……");
      logger.info("info日志……");
      logger.warn("warn日志……");
      logger.error("error日志……");
  }
}

使用LoggerFactory生成Logger對象,然后調用Logger對象的相應日志級別的方法打印即可。另外,在輸出日志時,字符串的拼接要使用占位符替換不要使用append等方法。

【強制】在日志輸出時,字符串變量之間的拼接使用占位符的方式。說明:因為 String 字符串的拼接會使用 StringBuilder 的 append()方式,有一定的性能損耗。使用占位符僅是替換動作,可以有效提升性能。正例:logger.debug("Processing trade with id: {} and symbol: {}", id, symbol);

上述代碼的運行效果:

2020-12-28 13:32:40.751 INFO 16016 --- [nio-8080-exec-2] c.c.e.e.service.LoggerService           : info日志……
2020-12-28 13:32:40.751 WARN 16016 --- [nio-8080-exec-2] c.c.e.e.service.LoggerService           : warn日志……
2020-12-28 13:32:40.751 ERROR 16016 --- [nio-8080-exec-2] c.c.e.e.service.LoggerService           : error日志……

從運行效果可以看出,SpringBoot默認的日志級別(trace < debug < info < warn < error)是info。

指定配置

SpringBoot日志的默認配置在org\springframework\boot\spring-boot\2.4.1\spring-boot-2.4.1.jar!\org\springframework\boot\logging\logback\defaults.xml文件中,內容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!--
Default logback configuration provided for import
-->

<included>
  <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
  <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
  <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />

  <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
  <property name="CONSOLE_LOG_CHARSET" value="${CONSOLE_LOG_CHARSET:-default}"/>
  <property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
  <property name="FILE_LOG_CHARSET" value="${FILE_LOG_CHARSET:-default}"/>

  <logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
  <logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
  <logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
  <logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
  <logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
  <logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
  <logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
  <logger name="org.springframework.boot.actuate.endpoint.jmx" level="WARN"/>
</included>

里面定義了默認的日志輸出格式, org\springframework\boot\spring-boot\2.4.1\spring-boot-2.4.1.jar!\org\springframework\boot\logging\logback\base.xml 文件中定義了日志默認級別。如果想要使用自定義的配置,在類路徑下放上日志框架自己對應的配置文件即可,如logback對應logback-spring.xml或logback.xml,log4j2對應log4j2-spring.xml或log4j2.xml,這樣Springboot便不在使用默認配置。

SpringBoot 官方建議在日志配置中使用 -spring 的配置方式(例如,使用 logback-spring.xml 而不是 logback.xml)。如果使用標準配置位置,Spring 無法完全控制日志初始化。

另外官方文檔中有明確提到,JUL(ava Util Logging) 在 FATJAR 場景下存在一些已知的類加載問題,所以要盡量避免在 FATJAR 場景下使用 JUL。

使用這種命名方式日志框架就不會直接加載日志的配置,而改由SpringBoot加載,同時使用SpringBoot的高級Profile功能指定某段配置只在某個環(huán)境下生效。

<springProfile name="dev">
 <!-- 激活dev下的配置 -->
</springProfile>

<springProfile name="!production">
 <!-- 激活非production下的配置 -->
</springProfile>

示例

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">  
 <layout class="ch.qos.logback.classic.PatternLayout">
 <!-- 該輸出格式只在dev下生效 -->
 <springProfile name="dev">
  <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level    %logger{50} - %msg%n</pattern>   
 </springProfile>     
 </layout> 
</appender>

logback配置詳解

logback完整配置如下

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">  
<!-- 日志文件的地址,windows和Linux下都要寫絕對地址 -->
<property name="LOG_HOME" value="/home" />
<!-- 日志輸出格式:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度,%msg:日志消息,%n是換行符 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />

<!--控制臺輸出 -->
<appender name="CONSOLE_OUT" class="ch.qos.logback.core.ConsoleAppender">
  <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <!-- 輸出格式,直接引用上面定義的property -->
    <pattern>${LOG_PATTERN}</pattern>
    </encoder>
</appender>

<!--文件輸出, 每天生成日志文件 -->
<appender name="FILE_OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!--日志文件名-->
    <FileNamePattern>${LOG_HOME}/XXX.log.%d{yyyy-MM-dd}.log</FileNamePattern>
    <!--日志文件保留天數(shù),15天是阿里巴巴開發(fā)規(guī)范中的最低要求-->
    <MaxHistory>15</MaxHistory>
  </rollingPolicy>
  <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <!--輸出格式,同上-->
    <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>

<!-- myibatis日志配置 -->
<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="DEBUG">
  <appender-ref ref="CONSOLE_OUT" />
  <appender-ref ref="FILE_OUT"/>
</root>

</configuration>

更換日志框架

SpringBoot中的日志實現(xiàn)默認是logback,假如我們要更換其他日志實現(xiàn),假如要更換為Log4j2,該怎么做呢?

<dependency>    
    <groupId>org.springframework.boot</groupId>    
    <artifactId>spring-boot-starter-web</artifactId>    
    <exclusions>
       <!-- 移除原實現(xiàn) -->
       <exclusion>  
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-logging</artifactId>        
       </exclusion>    
    </exclusions>
</dependency>  

<!-- 引入新實現(xiàn) -->
<dependency>    
    <groupId>org.springframework.boot</groupId>    
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

總結一下就是分為兩步:

移除原日志的實現(xiàn),根據(jù)新使用的日志實現(xiàn)不同需移除的項目也有所不同,如要使用log4j則需移除以下依賴。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
       <exclusion>
         <artifactId>logback-classic</artifactId>
         <groupId>ch.qos.logback</groupId>
       </exclusion>
       <exclusion>
         <artifactId>log4j-over-slf4j</artifactId>
         <groupId>org.slf4j</groupId>
       </exclusion>
    </exclusions>
</dependency>

引入新實現(xiàn)的依賴。

log4j需引入,這是一個適配層的包,其自動依賴了log4j。

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
</dependency>

log4j2需引入。

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

以上就是SpringBoot日志框架如何使用的詳細內容,更多關于SpringBoot日志框架的資料請關注腳本之家其它相關文章!

相關文章

  • 關于Maven parent.relativePath說明

    關于Maven parent.relativePath說明

    Maven中的relativePath用于指定父項目pom.xml的相對路徑,默認值為../pom.xml,這個配置幫助Maven在構建時定位父模塊的位置,確保模塊間的依賴關系正確,relativePath可以指向本地或遠程倉庫中的父項目,如果不需要尋找父項目,可以將其設置為空
    2024-09-09
  • java判斷字符串是否有逗號的方法

    java判斷字符串是否有逗號的方法

    下面小編就為大家?guī)硪黄猨ava判斷字符串是否有逗號的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • Java連接Sql數(shù)據(jù)庫經(jīng)常用到的操作

    Java連接Sql數(shù)據(jù)庫經(jīng)常用到的操作

    這篇文章主要介紹了Java連接Sql數(shù)據(jù)庫經(jīng)常用到的操作的相關資料,需要的朋友可以參考下
    2016-02-02
  • java實現(xiàn)二維碼生成的幾個方法(推薦)

    java實現(xiàn)二維碼生成的幾個方法(推薦)

    本篇文章主要介紹了java實現(xiàn)二維碼生成的幾個方法(推薦),具有一定的參考價值,有興趣的可以了解一下。
    2016-12-12
  • java中TCP實現(xiàn)回顯服務器及客戶端

    java中TCP實現(xiàn)回顯服務器及客戶端

    本文主要介紹了java中TCP實現(xiàn)回顯服務器及客戶端,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • swing分割窗口控件JSplitPane使用方法詳解

    swing分割窗口控件JSplitPane使用方法詳解

    這篇文章主要為大家詳細介紹了swing分割窗口控件JSplitPane的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • PowerJob的DesignateServer工作流程源碼解讀

    PowerJob的DesignateServer工作流程源碼解讀

    這篇文章主要介紹了PowerJob的DesignateServer工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Java Spring注解之@Async的基本用法和示例

    Java Spring注解之@Async的基本用法和示例

    Spring為任務調度與異步方法執(zhí)行提供了注解支持,通過在方法上設置@Async注解,可使得方法被異步調用,下面這篇文章主要給大家介紹了關于Java Spring注解之@Async的基本用法和示例,需要的朋友可以參考下
    2022-03-03
  • 詳解如何使用Java編寫圖形化的窗口

    詳解如何使用Java編寫圖形化的窗口

    這篇文章主要介紹了如何使用Java編寫圖形化的窗口,是Java的本地GUI軟件開發(fā)的基礎,需要的朋友可以參考下
    2015-10-10
  • Java設計模式之觀察者模式(Observer模式)介紹

    Java設計模式之觀察者模式(Observer模式)介紹

    這篇文章主要介紹了Java設計模式之觀察者模式(Observer模式)介紹,Java深入到一定程度,就不可避免的碰到設計模式(design pattern)這一概念,了解設計模式,將使自己對java中的接口或抽象類應用有更深的理解,需要的朋友可以參考下
    2015-03-03

最新評論