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

Logback的使用及如何配置

 更新時(shí)間:2021年03月30日 09:32:34   作者:江湖段小二  
這篇文章主要介紹了Logback的使用及如何配置,幫助大家更好的理解和學(xué)習(xí)使用Logback,感興趣的朋友可以了解下

日志在項(xiàng)目開(kāi)發(fā)過(guò)程的作用不言而喻,項(xiàng)目上線后,我們需要根據(jù)日志文件定位問(wèn)題發(fā)生的位置以及產(chǎn)生的原因。以前在項(xiàng)目開(kāi)發(fā)中,已經(jīng)有前人在工程中配置過(guò)日志,所以完全不需要自己再進(jìn)行日志的配置。這次在新的項(xiàng)目中自己來(lái)配置日志時(shí),還是遇到了一些波折,下面慢慢道來(lái)。

1 為什么選用Logback?

目前,在Springboot工程體系中,使用較多的日志組件是Slf4j、Logback以及Log4j2。而Slf4j本身只是一個(gè)接口類,具體的實(shí)現(xiàn)還是由Logback或Log4j2來(lái)完成的。由于Springboot自身就集成了Logback,默認(rèn)使用的日志組件是Logback,Logback的體系結(jié)構(gòu)具有足夠的通用性,可以在不同的場(chǎng)景下使用。因此,在我們的DRS工程中,使用了Logback進(jìn)行日志的打印。

目前,Logback包含三個(gè)部分:logback-core, logback-classic, logback-access。 Logback-core: 為其他兩個(gè)模塊奠定了基礎(chǔ) Logback-classic: 可以被同化為log4j的一個(gè)顯著改進(jìn)的版本,此外, logback-classic實(shí)現(xiàn)了slf4japi,因此您可以方便地在logback和其他日志框架(如log4j或log4j)之間來(lái)回切換java.util.logging文件 Logback-access: 集成了Servlet容器(如Tomcat和Jetty),以提供HTTP訪問(wèn)日志功能。

如果使用的是Springboot是2.4版本及以上,則不需要另外引入logback-core, logback-classic, logback-access和slf2j-api的依賴包的。

2 Logback的配置

首先,看一下我們?cè)贒RS工程中使用的Logback配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <property name="log.path" value="/duan/drs-server/logs" />
  <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
 
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
  </appender>
 
  <!-- 系統(tǒng)debug日志輸出 -->
  <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/drs-server-debug.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${log.path}/drs-server-debug.%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>DEBUG</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>
 
  <!-- 系統(tǒng)info日志輸出 -->
  <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/drs-server-info.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${log.path}/drs-server-info.%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>INFO</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>
 
  <!-- 系統(tǒng)warn日志輸出 -->
  <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/drs-server-warn.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${log.path}/drs-server-warn.%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>WARN</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>
 
  <!-- 系統(tǒng)error日志輸出 -->
  <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/drs-server-error.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${log.path}/drs-server-error.%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>ERROR</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>
 
  <logger name="com.nuonuo.middleware.drsserver" level="INFO" />
  <logger name="org.springframework" level="warn" />
 
  <root level="INFO">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE_DEBUG" />
    <appender-ref ref="FILE_INFO" />
    <appender-ref ref="FILE_WARN" />
    <appender-ref ref="FILE_ERROR" />
  </root>
</configuration>

說(shuō)明:

屬性 說(shuō)明
log.path 定義日志文件的輸出路徑
log.pattern 定義日志文件輸出格式
appender 定義了日志的輸出文件,日志文件保留時(shí)長(zhǎng),使用何種模式輸出,以及過(guò)濾規(guī)則。在上述文件中,分別針對(duì)DEBUG、INFO、WARN和ERROR日志進(jìn)行了定義了四個(gè)Appender
logger 用來(lái)設(shè)置某一個(gè)類或某個(gè)包的日志打印級(jí)別。在上述配置中,我們將DRS工程的日志輸出級(jí)別定義為INFO,那么,如果只想打印出DRS工程中的日志,則只需將打印級(jí)別level設(shè)置為WARN
root 是一個(gè)根logger,root下可以包含零個(gè)或多個(gè)appender。如果一個(gè)appender沒(méi)有在root下引入,則不會(huì)生成對(duì)應(yīng)的日志文件

3 Logback的輸出格式

針對(duì)以上述配置中的格式進(jìn)行說(shuō)明:

%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n
字段 說(shuō)明
%d{HH:mm:ss.SSS} 用于輸出日志事件的日期,其中%d也可以替換成%date,該設(shè)置對(duì)應(yīng)下圖中的紅色標(biāo)記部分
[%thread] 輸出對(duì)應(yīng)的線程名。在上面的截圖中可以看到,輸出線程是主線程main
%-5level 輸出日志級(jí)別,其中-5表示如果記錄器名稱長(zhǎng)度小于5個(gè)字符,則右鍵填充空格
%logger{20} 輸出日志事件起源處記錄器的名稱。其中20表示輸出記錄的名稱長(zhǎng)度限制,超過(guò)這個(gè)長(zhǎng)度,記錄器名將會(huì)進(jìn)行縮寫(xiě)。但是,記錄器名稱中最右邊的段從不縮寫(xiě),即使其長(zhǎng)度比“長(zhǎng)度”選項(xiàng)長(zhǎng)。其他段可以縮短到最多一個(gè)字符,但永遠(yuǎn)不會(huì)刪除
[%method,%line] %method 輸出發(fā)出日志記錄請(qǐng)求的方法名稱,%method也可替換成%M; %line——輸出發(fā)出日志記錄請(qǐng)求的行號(hào),%line也可替換成%L
%msg 輸出應(yīng)用程序提供的與日志事件關(guān)聯(lián)的消息。其中%msg也可替換成%m或%message
%n 輸出平臺(tái)相關(guān)的行分隔符字符

4 Appender

Appender子類包含F(xiàn)ilter、Encoder、ConsoleAppender、FileAppender、以及RollingFileAppender。其類圖關(guān)系如下所示。

顧名思義目標(biāo)文件由file選項(xiàng)指定。如果該文件已存在,則根據(jù)append屬性的值將其追加或截?cái)唷ollingFileAppender 擴(kuò)展了FileAppender,具有滾動(dòng)更新日志文件的功能。

類名 encoder immediateFlush target withJansi append file prudent rollingPolicy triggeringPolicy
OutputStreamAppender
ConsoleAppender
FileAppender - -
RollingFileAppender - -

OutputStreamAppender 這個(gè)類提供了其他附加程序構(gòu)建的基本服務(wù)。該類包含兩個(gè)屬性設(shè)置: encoder—— 確定日志寫(xiě)入的編碼格式。 immediateFlush——布爾值,默認(rèn)為true, 立即刷新輸出流可確保立即寫(xiě)出日志事件,并且在應(yīng)用程序退出而未正確關(guān)閉附加器時(shí)不會(huì)丟失這些事件。 另一方面,將此屬性設(shè)置為“false”可能會(huì)使日志吞吐量增加四倍。同樣,如果immediateFlush設(shè)置為“false”,并且應(yīng)用程序退出時(shí)appender未正確關(guān)閉,則尚未寫(xiě)入磁盤(pán)的日志事件可能會(huì)丟失。

ConsoleAppender 將日志附加在控制臺(tái)上,其包含三個(gè)屬性: encoder——略 target—— System.out或者 System.err字符串值之一 默認(rèn)目標(biāo)是 System.out withJansi——布爾值,默認(rèn)false。 將withJansi設(shè)置為true將激活Jansi庫(kù),該庫(kù)為Windows機(jī)器上的ANSI顏色代碼提供支持。在Windows主機(jī)上,如果此屬性設(shè)置為true,則應(yīng)將網(wǎng)址:org.fusesource.jansi:jansi:1.17“在類路徑上進(jìn)行設(shè)置。請(qǐng)注意,基于Unix的操作系統(tǒng)(如Linux和macosx)默認(rèn)支持ANSI顏色代碼。一般我們很少用到,使用默認(rèn)值即可。

FileAppender 它將日志事件附加到文件中,其包含四個(gè)屬性: append——布爾值,默認(rèn)為true, 表示事件附加在現(xiàn)有文件的末尾。如果append為false,則任何現(xiàn)有文件都將被截?cái)唷?encoder——略 file—— 要寫(xiě)入的文件的名稱, 如果文件不存在,則創(chuàng)建該文件。 如果文件的父目錄不存在,F(xiàn)ileAppender將自動(dòng)創(chuàng)建它,包括任何必要但不存在的父目錄。 prudent——布爾值,默認(rèn)值為false。如果設(shè)置為true, FileAppender將安全地寫(xiě)入指定的文件,即使存在運(yùn)行在不同jvm(可能運(yùn)行在不同主機(jī)上)中的其他FileAppender實(shí)例。

RollingFileAppender 擴(kuò)展了FileAppender,具有滾動(dòng)更新日志文件的功能,其包含以下幾個(gè)屬性: file——略 append——略 encoder——略 rollingPolicy—— 此選項(xiàng)是在發(fā)生滾動(dòng)時(shí)指定RollingFileAppender行為的組件,包含SizeAndTimeBasedRollingPolicy、FixedWindowRollingPolicy、TimeBasedRollingPolicy。在上述配置中我們使用的是最為廣泛的TimeBasedRollingPolicy。 triggeringPolicy—— 此選項(xiàng)是通知RollingFileAppender何時(shí)激活滾動(dòng)更新過(guò)程的組件 prudent——布爾值,當(dāng)為true時(shí),不支持FixedWindowRollingPolicy。

5 Logback使用過(guò)程中遇到的問(wèn)題

起初,在配置完logback.xml文件后,始終無(wú)法將日志輸出到指定目錄。 第一步,調(diào)試確認(rèn)使用的是logback組件; 第二步,引入logback-core、logback-classic、logback-access和slf4j-api對(duì)應(yīng)的jar包,驗(yàn)證是否可以將日志輸出到指定目錄。驗(yàn)證后發(fā)現(xiàn),仍然無(wú)法解決問(wèn)題,于是將引入的jar包刪除。 第三步,排除springboot中包含的log4j2相關(guān)的jar,驗(yàn)證后仍無(wú)法解決問(wèn)題。 第四步,在網(wǎng)上查到可能跟配置文件的命名有關(guān),有說(shuō)logback-spring.xml加載的優(yōu)先級(jí)最高,于是將文件名由logback.xml改為logback-spring.xml,但是仍然無(wú)法解決問(wèn)題。官網(wǎng)上看到的加載順序是: logback-test.xml> logback.groovy> logback.xml。具體可見(jiàn)官方文檔logback.qos.ch/manual/conf… 第五步,懷疑可能沒(méi)加載logback.xml文件,于是在application.properties中加入logging.config=classpath:logback.xml,啟動(dòng)工程時(shí)報(bào)錯(cuò),錯(cuò)誤信息是: class path resource [logback.xml] cannot be resolved to URL because it does not exist。

根據(jù)錯(cuò)誤信息可以看到,系統(tǒng)中根本沒(méi)有加載到logback.xml文件。 第六步,由于第五步驗(yàn)證系統(tǒng)根本沒(méi)有加載到logback.xml文件,于是檢查了一下pom.xml文件,發(fā)現(xiàn)在build時(shí),沒(méi)有引入資源文件,于是修改pom.xml文件,添加如下內(nèi)容,成功將日志輸出到指定目錄。

<resource>
  <directory>src/main/resources</directory>
  <includes>
    <include>**/*.xml</include>
  </includes>
  <filtering>false</filtering>
</resource>

以上就是Logback的使用及如何配置的詳細(xì)內(nèi)容,更多關(guān)于Logback的使用和配置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java深入數(shù)據(jù)結(jié)構(gòu)理解掌握抽象類與接口

    Java深入數(shù)據(jù)結(jié)構(gòu)理解掌握抽象類與接口

    在類中沒(méi)有包含足夠的信息來(lái)描繪一個(gè)具體的對(duì)象,這樣的類稱為抽象類,接口是Java中最重要的概念之一,它可以被理解為一種特殊的類,不同的是接口的成員沒(méi)有執(zhí)行體,是由全局常量和公共的抽象方法所組成,本文給大家介紹Java抽象類和接口,感興趣的朋友一起看看吧
    2022-05-05
  • ZooKeeper Java API編程實(shí)例分析

    ZooKeeper Java API編程實(shí)例分析

    本文主要通過(guò)實(shí)例給大家詳細(xì)分析了ZooKeeper用JAVA實(shí)現(xiàn)API編程的知識(shí)要點(diǎn)。
    2017-11-11
  • SpringBoot 圖形驗(yàn)證碼的生成和校驗(yàn)

    SpringBoot 圖形驗(yàn)證碼的生成和校驗(yàn)

    隨著系統(tǒng)和業(yè)務(wù)的不停升級(jí),前后端代碼放在一起的項(xiàng)目越來(lái)越臃腫,已經(jīng)無(wú)法快速迭代和職責(zé)區(qū)分了,于是紛紛投入了前后端分離的懷抱,發(fā)現(xiàn)代碼和職責(zé)分離以后,開(kāi)發(fā)效率越來(lái)越高了,但是以前的驗(yàn)證碼登錄方案就要更改了。本文來(lái)看一下SpringBoot 圖形驗(yàn)證碼的生成和校驗(yàn)
    2021-05-05
  • Java教程package和import訪問(wèn)控制的步驟詳解

    Java教程package和import訪問(wèn)控制的步驟詳解

    這篇文章主要為大家介紹了Java教程package和import訪問(wèn)控制的步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Java中的Native關(guān)鍵字講解

    Java中的Native關(guān)鍵字講解

    本文介紹了Java中的Native關(guān)鍵字,native關(guān)鍵字是架起本機(jī)語(yǔ)言和JAVA之間鴻溝的橋梁。如果我們的軟件與硬件的交互在使用預(yù)先存在的代碼時(shí)更有效,那么這可以作為一個(gè)關(guān)鍵環(huán)節(jié)。與從頭開(kāi)始設(shè)計(jì)新的應(yīng)用程序代碼相比,只要可以避免,它就可以使實(shí)現(xiàn)工作更少,下面來(lái)了解集體內(nèi)容
    2021-12-12
  • java使用文件流實(shí)現(xiàn)查看下載次數(shù)

    java使用文件流實(shí)現(xiàn)查看下載次數(shù)

    這篇文章主要為大家詳細(xì)介紹了java使用文件流實(shí)現(xiàn)查看下載次數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • elasticsearch節(jié)點(diǎn)的transport請(qǐng)求發(fā)送處理分析

    elasticsearch節(jié)點(diǎn)的transport請(qǐng)求發(fā)送處理分析

    這篇文章主要為大家介紹了elasticsearch節(jié)點(diǎn)的transport請(qǐng)求發(fā)送處理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • java實(shí)現(xiàn)1M圖片壓縮優(yōu)化到100kb實(shí)現(xiàn)示例

    java實(shí)現(xiàn)1M圖片壓縮優(yōu)化到100kb實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了java實(shí)現(xiàn)1M圖片壓縮優(yōu)化到100kb示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Java?IO網(wǎng)絡(luò)模型實(shí)現(xiàn)解析

    Java?IO網(wǎng)絡(luò)模型實(shí)現(xiàn)解析

    這篇文章主要為大家介紹了Java?IO網(wǎng)絡(luò)模型實(shí)現(xiàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Java實(shí)現(xiàn)獲取內(nèi)網(wǎng)的所有IP地址

    Java實(shí)現(xiàn)獲取內(nèi)網(wǎng)的所有IP地址

    這篇文章主要介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)獲取內(nèi)網(wǎng)的所有IP地址,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定的參考價(jià)值,快跟隨小編一起學(xué)習(xí)一下吧
    2022-06-06

最新評(píng)論