欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java接口測(cè)試之日志框架Logback的具體使用

 更新時(shí)間:2022年01月23日 15:44:58   作者:zuozewei  
本文主要介紹了Java接口測(cè)試之日志框架Logback的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、引言

對(duì)于一個(gè)成熟的接口測(cè)試框架,日志管理這個(gè)是必不可少的。在開發(fā)和調(diào)試階段,日志可以幫助我們更快的定位問題;而在測(cè)試的運(yùn)維過程中,日志系統(tǒng)又可以幫助我們記錄大部分的異常信息,通

二、前言

Spring Boot 在所有內(nèi)部日志中使用Commons Logging,但是默認(rèn)配置也提供了對(duì)常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每種 Logger 都可以通過配置使用控制臺(tái)或者文件輸出日志內(nèi)容。

三、LogBack、Slf4j和Log4j之間的關(guān)系

Slf4j是The Simple Logging Facade for Java的簡(jiǎn)稱,是一個(gè)簡(jiǎn)單日志門面抽象框架,它本身只提供了日志Facade API和一個(gè)簡(jiǎn)單的日志類實(shí)現(xiàn),一般常配合Log4j,LogBack,java.util.logging使用。Slf4j作為應(yīng)用層的Log接入時(shí),程序可以根據(jù)實(shí)際應(yīng)用場(chǎng)景動(dòng)態(tài)調(diào)整底層的日志實(shí)現(xiàn)框架(Log4j/LogBack/JdkLog…)。

LogBack和Log4j都是開源日記工具庫(kù),LogBack 是 Log4j 的改良版本,比 Log4j 擁有更多的特性,同時(shí)也帶來(lái)很大性能提升,同時(shí)天然支持SLF4J。

LogBack 官方建議配合 Slf4j 使用,這樣可以靈活地替換底層日志框架。

TIPS:為了優(yōu)化log4j,以及更大性能的提升,Apache基金會(huì)已經(jīng)著手開發(fā)了log4j 2.0, 其中也借鑒和吸收了logback的一些先進(jìn)特性。

四、默認(rèn)日志Logback

默認(rèn)情況下,Spring Boot 會(huì)用 Logback 來(lái)記錄日志,并用 INFO 級(jí)別輸出到控制臺(tái)。在運(yùn)行應(yīng)用程序和其他例子時(shí),你應(yīng)該已經(jīng)看到很多INFO級(jí)別的日志了。

從上圖可以看到,日志輸出內(nèi)容元素具體如下:

  • 時(shí)間日期:精確到毫秒
  • 日志級(jí)別:ERROR, WARN, INFO, DEBUG or TRACE
  • Logger名:通常使用源代碼的類名
  • 分隔符:--- 標(biāo)識(shí)實(shí)際日志的開始
  • 進(jìn)程 ID
  • 線程名:方括號(hào)括起來(lái)(可能會(huì)截?cái)嗫刂婆_(tái)輸出)
  • 日志內(nèi)容

五、配置詳解

1、添加日志依賴

假如maven依賴中添加了spring-boot-starter-logging:

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

那么,我們的Spring Boot應(yīng)用將自動(dòng)使用 logback 作為應(yīng)用日志框架,Spring Boot 啟動(dòng)的時(shí)候,由 org.springframework.boot.logging.Logging-Application-Listener根據(jù)情況初始化并使用。

但是呢,實(shí)際開發(fā)中我們不需要直接添加該依賴,你會(huì)發(fā)現(xiàn)spring-boot-starter其中包含了 spring-boot-starter-logging,該依賴內(nèi)容就是 Spring Boot 默認(rèn)的日志框架 logback

2、配置文件

Spring Boot 官方推薦優(yōu)先使用帶有-spring的文件名作為你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名為logback-spring.xml的日志配置文件,spring boot可以為它添加一些 spring boot特有的配置項(xiàng)(下面會(huì)提到)。并且放在src/main/resources下面即可。

配置文件 logback-spring.xml

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

? ? <!-- 日志根目錄-->
? ? <springProperty scope="context" name="LOG_HOME" source="logging.path" defaultValue="./logs/spring-boot-logback"/>

? ? <!-- 日志級(jí)別 -->
? ? <springProperty scope="context" name="LOG_ROOT_LEVEL" source="logging.level.root" defaultValue="DEBUG"/>

? ? <!-- ?標(biāo)識(shí)這個(gè)"STDOUT" 將會(huì)添加到這個(gè)logger -->
? ? <springProperty scope="context" name="STDOUT" source="log.stdout" defaultValue="STDOUT"/>

? ? <!-- 日志文件名稱-->
? ? <property name="LOG_PREFIX" value="spring-boot-logback" />

? ? <!-- 日志文件編碼-->
? ? <property name="LOG_CHARSET" value="UTF-8" />

? ? <!-- 日志文件路徑+日期-->
? ? <property name="LOG_DIR" value="${LOG_HOME}/%d{yyyyMMdd}" />

? ? <!--對(duì)日志進(jìn)行格式化-->
? ? <property name="LOG_MSG" value="- | [%X{requestUUID}] | [%d{yyyyMMdd HH:mm:ss.SSS}] | [%level] | [${HOSTNAME}] | [%thread] | [%logger{36}] | --> %msg|%n "/>

? ? <!--文件大小,默認(rèn)10MB-->
? ? <property name="MAX_FILE_SIZE" value="50MB" />

? ? <!-- 配置日志的滾動(dòng)時(shí)間 ,表示只保留最近 10 天的日志-->
? ? <property name="MAX_HISTORY" value="10"/>

? ? <!--輸出到控制臺(tái)-->
? ? <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
? ? ? ? <!-- 輸出的日志內(nèi)容格式化-->
? ? ? ? <layout class="ch.qos.logback.classic.PatternLayout">
? ? ? ? ? ? <pattern>${LOG_MSG}</pattern>
? ? ? ? </layout>
? ? </appender>

? ? <!--輸出到文件-->
? ? <appender name="0" class="ch.qos.logback.core.rolling.RollingFileAppender">
? ? </appender>

? ? <!-- 定義 ALL 日志的輸出方式:-->
? ? <appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
? ? ? ? <!--日志文件路徑,日志文件名稱-->
? ? ? ? <File>${LOG_HOME}/all_${LOG_PREFIX}.log</File>

? ? ? ? <!-- 設(shè)置滾動(dòng)策略,當(dāng)天的日志大小超過 ${MAX_FILE_SIZE} 文件大小時(shí)候,新的內(nèi)容寫入新的文件, 默認(rèn)10MB -->
? ? ? ? <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

? ? ? ? ? ? <!--日志文件路徑,新的 ALL 日志文件名稱,“ i ” 是個(gè)變量 -->
? ? ? ? ? ? <FileNamePattern>${LOG_DIR}/all_${LOG_PREFIX}%i.log</FileNamePattern>

? ? ? ? ? ? <!-- 配置日志的滾動(dòng)時(shí)間 ,表示只保留最近 10 天的日志-->
? ? ? ? ? ? <MaxHistory>${MAX_HISTORY}</MaxHistory>

? ? ? ? ? ? <!--當(dāng)天的日志大小超過 ${MAX_FILE_SIZE} 文件大小時(shí)候,新的內(nèi)容寫入新的文件, 默認(rèn)10MB-->
? ? ? ? ? ? <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
? ? ? ? ? ? ? ? <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
? ? ? ? ? ? </timeBasedFileNamingAndTriggeringPolicy>

? ? ? ? </rollingPolicy>

? ? ? ? <!-- 輸出的日志內(nèi)容格式化-->
? ? ? ? <layout class="ch.qos.logback.classic.PatternLayout">
? ? ? ? ? ? <pattern>${LOG_MSG}</pattern>
? ? ? ? </layout>
? ? </appender>

? ? <!-- 定義 ERROR 日志的輸出方式:-->
? ? <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
? ? ? ? <!-- 下面為配置只輸出error級(jí)別的日志 -->
? ? ? ? <filter class="ch.qos.logback.classic.filter.LevelFilter">
? ? ? ? ? ? <level>ERROR</level>
? ? ? ? ? ? <OnMismatch>DENY</OnMismatch>
? ? ? ? ? ? <OnMatch>ACCEPT</OnMatch>
? ? ? ? </filter>
? ? ? ? <!--日志文件路徑,日志文件名稱-->
? ? ? ? <File>${LOG_HOME}/err_${LOG_PREFIX}.log</File>

? ? ? ? <!-- 設(shè)置滾動(dòng)策略,當(dāng)天的日志大小超過 ${MAX_FILE_SIZE} 文件大小時(shí)候,新的內(nèi)容寫入新的文件, 默認(rèn)10MB -->
? ? ? ? <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

? ? ? ? ? ? <!--日志文件路徑,新的 ERR 日志文件名稱,“ i ” 是個(gè)變量 -->
? ? ? ? ? ? <FileNamePattern>${LOG_DIR}/err_${LOG_PREFIX}%i.log</FileNamePattern>

? ? ? ? ? ? <!-- 配置日志的滾動(dòng)時(shí)間 ,表示只保留最近 10 天的日志-->
? ? ? ? ? ? <MaxHistory>${MAX_HISTORY}</MaxHistory>

? ? ? ? ? ? <!--當(dāng)天的日志大小超過 ${MAX_FILE_SIZE} 文件大小時(shí)候,新的內(nèi)容寫入新的文件, 默認(rèn)10MB-->
? ? ? ? ? ? <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
? ? ? ? ? ? ? ? <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
? ? ? ? ? ? </timeBasedFileNamingAndTriggeringPolicy>
? ? ? ? </rollingPolicy>

? ? ? ? <!-- 輸出的日志內(nèi)容格式化-->
? ? ? ? <layout class="ch.qos.logback.classic.PatternLayout">
? ? ? ? ? ? <Pattern>${LOG_MSG}</Pattern>
? ? ? ? </layout>
? ? </appender>

? ? <!-- additivity 設(shè)為false,則logger內(nèi)容不附加至root ,配置以配置包下的所有類的日志的打印,級(jí)別是 ERROR-->

? ? <logger name="org.springframework" ? ? level="ERROR" />
? ? <logger name="org.apache.commons" ? ? ?level="ERROR" />
? ? <logger name="org.apache.zookeeper" ? ?level="ERROR" ?/>
? ? <logger name="com.alibaba.dubbo.monitor" level="ERROR"/>
? ? <logger name="com.alibaba.dubbo.remoting" level="ERROR" />

? ? <!-- ${LOG_ROOT_LEVEL} 日志級(jí)別 -->
? ? <root level="${LOG_ROOT_LEVEL}">

? ? ? ? <!-- 標(biāo)識(shí)這個(gè)"${STDOUT}"將會(huì)添加到這個(gè)logger -->
? ? ? ? <appender-ref ref="${STDOUT}"/>

? ? ? ? <!-- FILE_ALL 日志輸出添加到 logger -->
? ? ? ? <appender-ref ref="FILE_ALL"/>

? ? ? ? <!-- FILE_ERROR 日志輸出添加到 logger -->
? ? ? ? <appender-ref ref="FILE_ERROR"/>
? ? </root>

</configuration>

配置文件 application.yml

server:
? port: 8888 ?# 端口號(hào)

logging:
? path: ./logs/zuozewei
? level:
? ? root: info #日志級(jí)別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設(shè)置為WARN,則低于WARN的信息都不會(huì)輸出

日志會(huì)每天新建一個(gè)文件夾,日文文件配置的每50兆,一個(gè)文本文件,超過新寫入一個(gè)

文件夾:20181228
文件夾內(nèi)容:all_spring-boot-logback0.log 
文件夾內(nèi)容:all_spring-boot-logback1.log
文件夾內(nèi)容:all_spring-boot-logback2.log

文件夾內(nèi)容:err_spring-boot-logback0.log

六、多環(huán)境日志輸出

根據(jù)不同環(huán)境(prod:生產(chǎn)環(huán)境,test:測(cè)試環(huán)境,dev:開發(fā)環(huán)境)來(lái)定義不同的日志輸出,在 logback-spring.xml中使用 springProfile 節(jié)點(diǎn)來(lái)定義,方法如下:

文件名稱不是 logback.xml,想使用spring擴(kuò)展profile支持,要以logback-spring.xml 命名

<!-- 生產(chǎn)環(huán)境生效 -->
?? ?<springProfile name="prod">
?? ??? ?<root level="error">
?? ??? ??? ?<appender-ref ref="STDOUT" />
?? ??? ??? ?<appender-ref ref="FILE" />
?? ??? ?</root>
?? ?</springProfile>


?? ?<!-- 測(cè)試和開發(fā)環(huán)境日志級(jí)別為INFO/并且記錄日志文件 -->
?? ?<springProfile name="dev,test">
?? ??? ?<!-- 日志輸出級(jí)別 -->
?? ??? ?<root level="INFO">
?? ??? ??? ?<appender-ref ref="STDOUT" />
?? ??? ??? ?<appender-ref ref="FILE" />
?? ??? ?</root>
?? ?</springProfile>

可以啟動(dòng)服務(wù)的時(shí)候指定 profile (如不指定使用默認(rèn)),如指定prod 的方式為:

java -jar xxx.jar –spring.profiles.active=prod

七、單元測(cè)試

此處我選擇使用lombok效率插件,所以只需要@Slf4j注解即可簡(jiǎn)化private Logger logger = LoggerFactory.getLogger(this.getClass())的寫法
RunWith(SpringRunner.class)

@SpringBootTest
@Slf4j
public class LogbackdemoApplicationTests {

?? ?@Test
?? ?public void contextLoads() {
?? ??? ?log.info("輸出info");
?? ??? ?log.debug("輸出debug");
?? ??? ?log.error("輸出error");
?? ?}

}

生成的日志:

- | [] | [20181228 22:53:20.756] | [INFO] | [192.168.1.18] | [main] | [c.z.l.LogbackdemoApplicationTests] | --> Starting LogbackdemoApplicationTests on 192.168.1.18 with PID 82507 (started by apple in /Users/apple/Downloads/Springboot-logback-demo)|
- | [] | [20181228 22:53:20.762] | [INFO] | [192.168.1.18] | [main] | [c.z.l.LogbackdemoApplicationTests] | --> No active profile set, falling back to default profiles: default|
- | [] | [20181228 22:53:21.590] | [INFO] | [192.168.1.18] | [main] | [c.z.l.LogbackdemoApplicationTests] | --> Started LogbackdemoApplicationTests in 1.69 seconds (JVM running for 3.525)|
- | [] | [20181228 22:53:21.955] | [INFO] | [192.168.1.18] | [main] | [c.z.l.LogbackdemoApplicationTests] | --> 輸出info|
- | [] | [20181228 22:53:21.955] | [ERROR] | [192.168.1.18] | [main] | [c.z.l.LogbackdemoApplicationTests] | --> 輸出error|

八、工程目錄

九、總結(jié)

到此為止終于介紹完 Logback日志框架了,平時(shí)使用的時(shí)候推薦用自定義logback-spring.xml來(lái)配置,代碼中使用日志也很簡(jiǎn)單,類里面添加private Logger logger = LoggerFactory.getLogger(this.getClass()); 即可,如果使用lombok效率插件需要@Slf4j注解。

本文源碼:github.com/zuozewei/blog-example/tree/master/Java-api-test/03-log-framework/springboot-logback-demo

到此這篇關(guān)于Java接口測(cè)試之日志框架Logback的具體使用的文章就介紹到這了,更多相關(guān)Java Logback內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Sharding-Jdbc如何配置主從讀寫分離模式

    Sharding-Jdbc如何配置主從讀寫分離模式

    文章介紹了如何使用Sharding-JDBC實(shí)現(xiàn)MySQL的讀寫分離,通過配置主從數(shù)據(jù)源和讀寫分離策略,可以在項(xiàng)目中實(shí)現(xiàn)高效的數(shù)據(jù)庫(kù)讀寫操作,同時(shí),文章還提到解決MySQL連接異常的一個(gè)常見方法
    2025-03-03
  • Spring Security使用數(shù)據(jù)庫(kù)認(rèn)證及用戶密碼加密和解密功能

    Spring Security使用數(shù)據(jù)庫(kù)認(rèn)證及用戶密碼加密和解密功能

    這篇文章主要介紹了Spring Security使用數(shù)據(jù)庫(kù)認(rèn)證及用戶密碼加密和解密,本文通過代碼與截圖的形式給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • RabbitMQ中的prefetch_count參數(shù)詳解

    RabbitMQ中的prefetch_count參數(shù)詳解

    這篇文章主要介紹了RabbitMQ中的prefetch_count參數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • springboot獲取微信JSDK簽名信息的實(shí)現(xiàn)示例

    springboot獲取微信JSDK簽名信息的實(shí)現(xiàn)示例

    本文介紹了如何在Spring Boot應(yīng)用中獲取微信JSDK的簽名信息,包括獲取接口URL、參數(shù)設(shè)置、簽名算法和獲取簽名結(jié)果的步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Java實(shí)現(xiàn)優(yōu)先隊(duì)列式廣度優(yōu)先搜索算法的示例代碼

    Java實(shí)現(xiàn)優(yōu)先隊(duì)列式廣度優(yōu)先搜索算法的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)優(yōu)先隊(duì)列式廣度優(yōu)先搜索算法,文中通過一個(gè)示例帶大家具體了解了實(shí)現(xiàn)的方法,需要的可以參考一下
    2022-08-08
  • SpringBoot + Spring Security 基本使用及個(gè)性化登錄配置詳解

    SpringBoot + Spring Security 基本使用及個(gè)性化登錄配置詳解

    這篇文章主要介紹了SpringBoot + Spring Security 基本使用及個(gè)性化登錄配置詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-05-05
  • Spring Boot集成netty實(shí)現(xiàn)客戶端服務(wù)端交互示例詳解

    Spring Boot集成netty實(shí)現(xiàn)客戶端服務(wù)端交互示例詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot集成netty實(shí)現(xiàn)客戶端服務(wù)端交互的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Spring Boot實(shí)現(xiàn)郵件發(fā)送功能

    Spring Boot實(shí)現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了Spring Boot實(shí)現(xiàn)郵件發(fā)送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 如何解決LocalDateTime傳值JSON格式化問題

    如何解決LocalDateTime傳值JSON格式化問題

    這篇文章主要介紹了如何解決LocalDateTime傳值JSON格式化問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Jmeter生成UUID作為唯一標(biāo)識(shí)符過程圖解

    Jmeter生成UUID作為唯一標(biāo)識(shí)符過程圖解

    這篇文章主要介紹了Jmeter生成UUID作為唯一標(biāo)識(shí)符過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評(píng)論