最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot使用slf4j日志并輸出到文件中的操作方法

 更新時(shí)間:2023年08月16日 08:43:53   作者:99年的可樂(lè)  
這篇文章主要介紹了SpringBoot使用slf4j日志并輸出到文件中,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

slf4j日志(3月11日)

再使用前,先了解一下介紹,否則你也不會(huì)用!

1、日志級(jí)別

  • SLF4J將日志分為trace、debug、info、warn、error五個(gè)級(jí)別,每個(gè)級(jí)別對(duì)應(yīng)記錄不同的日志,對(duì)應(yīng)不同的使用場(chǎng)景。
  • 日志級(jí)別從低到高分為

TRACE < DEBUG < INFO < WARN < ERROR < FATAL

如果設(shè)置為 WARN ,則低于 WARN 的信息都不會(huì)輸出

一般設(shè)置為 DEBUG 就夠用了,看具體的業(yè)務(wù)需求,開(kāi)發(fā)時(shí)設(shè)置成 trace 方便定位問(wèn)題,在生產(chǎn)環(huán)境上,將這個(gè)日志級(jí)別再設(shè)置成 error 級(jí)別即可。

trace

trace是最低優(yōu)先級(jí)的日志,一般用來(lái)追蹤詳細(xì)的程序運(yùn)行流,比如程序的運(yùn)行過(guò)程中,運(yùn)行到了哪一個(gè)方法,進(jìn)入了哪一條分支。通過(guò)trace程序的運(yùn)行流程,可以判斷程序是否按照期望的邏輯在運(yùn)行。舉個(gè)例子,有以下代碼段。

public class Car{
//點(diǎn)火
public void fire(){
log.trace("fire")
...
}

debug

debug是比trace高一級(jí)別的日志,該級(jí)別的日志就是用來(lái)debug用的。這類日志往往用在判斷是否有出現(xiàn)bug的場(chǎng)景,且往往記錄了代碼運(yùn)行的詳細(xì)信息,比如方法調(diào)用傳入的參數(shù)信息。

假設(shè)運(yùn)行的過(guò)程中出現(xiàn)了問(wèn)題,為了定位問(wèn)題的原因,可以使用debug級(jí)別的日志來(lái)記錄檔位,通過(guò)記錄運(yùn)行時(shí)傳入的gear來(lái)判斷是不是因?yàn)闄n位輸入錯(cuò)誤而導(dǎo)致Car起步失敗。

//掛檔
public void gear(int gear){
log.trace("gear")
//記錄檔位
log.debug(gear)
...
}

info

info比debug高一級(jí)別,用來(lái)記錄程序運(yùn)行的一些關(guān)鍵信息,它不像trace那樣記錄程序運(yùn)行的整個(gè)流程,也不像debug那樣為了解決問(wèn)題而記錄詳細(xì)的信息。

info記錄的是整個(gè)系統(tǒng)的運(yùn)行信息,比如系統(tǒng)運(yùn)行到了哪一個(gè)階段,到達(dá)了哪一個(gè)狀態(tài)。還是以車啟動(dòng)為例子,將啟動(dòng)的代碼修改如下。

public void static main(String[] args){
Car car = new Car();
car.fire();
car.clutch();
car.gear(1);
car.looseBrake();
log.info("car is ready to run faster !");
}
可以看到,運(yùn)行完looseBrake方法之后,使用info記錄了車的狀態(tài),車已經(jīng)完成了起步了,可以踩油門加速了。

warn

warn比info的級(jí)別更高,用來(lái)記錄一些警告信息。警告信息表示,程序進(jìn)入了一個(gè)特殊的狀態(tài),在該狀態(tài)下程序可以繼續(xù)運(yùn)行,但是不建議讓程序進(jìn)入該狀態(tài),因?yàn)樵摖顟B(tài)可能導(dǎo)致結(jié)果出現(xiàn)問(wèn)題

車啟動(dòng)的過(guò)程中如果以大于1檔起步,就使用warn記錄警告,告訴調(diào)用者不推薦這樣使用,實(shí)際上2檔起步也是可以的,但可能會(huì)出問(wèn)題

//掛檔
public void gear(int gear){
log.trace("gear")
//記錄檔位
log.debug(gear)
if(gear > 1){
log.warn("gear "+ gear +" is too high !")
}
...
}

error

error級(jí)別的日志是最高優(yōu)先級(jí)了,用來(lái)記錄運(yùn)行時(shí)的錯(cuò)誤信息,表示程序運(yùn)行過(guò)程中出現(xiàn)了需要被解決的問(wèn)題,往往是一些異常。使用error日志的時(shí)候,一般會(huì)將詳細(xì)的異常出現(xiàn)的原因記錄。

public void static main(String[] args){
Car car = new Car();
try{
car.fire();
car.clutch();
car.gear(1);
car.looseBrake();
}catch(Exception e){
log.error("run failed !",e.getCause())
}
log.info("car is ready to run faster !");
}

2、spring boot使用 日志接口介紹

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

SLF4J類似于Commons Logging,也是一個(gè)日志接口,而Logback類似于Log4j,是一個(gè)日志的實(shí)現(xiàn)。

根據(jù)不同的日志系統(tǒng),你可以按如下規(guī)則組織配置文件名,就能被正確加載:

Spring Boot官方推薦使用帶有 -spring 的文件名作為你的日志配置(如logback-spring.xml,而不是logback.xml),命名為logback-spring.xml的日志配置文件,spring boot可以為它添加一些spring boot特有的配置項(xiàng)(下面會(huì)提到)。

默認(rèn)的命名規(guī)則,并且放在 src/main/resources 下面即可

  • Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
  • Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
  • Log4j2:log4j2-spring.xml, log4j2.xml
  • JDK (Java Util Logging):logging.properties

引入依賴

spring-boot-starter 這個(gè)包就自帶了 logging 的依賴包,SpringBoot會(huì)默認(rèn)使用 logback 作為日志框架,在生成springboot項(xiàng)目的時(shí)候可以直接勾選logback,那么就可以直接使用logback了。手動(dòng)添加的話,建議使用slf4j+logback,后面項(xiàng)目更容易維護(hù):

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

日志配置類介紹

如下配置將:

  • 在根目錄 applog 中每天生成一個(gè)文件夾,并生成一個(gè)天級(jí)別的日志文件。
  • Logger標(biāo)簽:作為日志的記錄器,把它關(guān)聯(lián)到應(yīng)用的對(duì)應(yīng)的context上后,主要用于存放日志對(duì)象,也可以定義日志類型、級(jí)別。
  • Appender主要用于指定日志輸出的目的地,目的地可以是控制臺(tái)、文件、遠(yuǎn)程套接字服務(wù)器、 MySQL、PostreSQL、 Oracle和其他數(shù)據(jù)庫(kù)、 JMS和遠(yuǎn)程UNIX Syslog守護(hù)-進(jìn)程等。
  • Layout 負(fù)責(zé)把事件轉(zhuǎn)換成字符串,格式化的日志信息的輸出

logback-spring.xml,放在 src/main/resources 下面

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>logback</contextName>
    <!--輸出到控制臺(tái)-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!--按天生成日志,即一天只生成一個(gè)文件夾和一個(gè)日志文件-->
    <appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <Prudent>true</Prudent>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>
                applog/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log
            </FileNamePattern>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} -%msg%n
            </Pattern>
        </layout>
    </appender>
    <!-- logger節(jié)點(diǎn),可選節(jié)點(diǎn),作用是指明具體的包或類的日志輸出級(jí)別,
    以及要使用的<appender>(可以把<appender>理解為一個(gè)日志模板)。
    addtivity:非必寫屬性,是否向上級(jí)loger傳遞打印信息。默認(rèn)是true-->
    <logger name="com.framework.job" additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="logFile"/>
    </logger>
    <!--項(xiàng)目的整體的日志打印級(jí)別為info-->
    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="logFile"/>
    </root>
</configuration>

日志級(jí)別單獨(dú)配置

application.yml使用以下方式,可以單獨(dú)設(shè)置每個(gè)包下的日志記錄級(jí)別,其中file屬性可有可無(wú)

logging:
  file: applog/sys.log
  level:
    com:
      leshangju:
        prism:
          auth:
            dao: debug
          usershop:
            dao: debug
          loginuser:
            dao: debug

application.properties

logging.level.com.framework.job : info

測(cè)試結(jié)果

@Slf4j
public class MyJob extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("啟動(dòng)定時(shí)任務(wù) My Job:" + LocalDateTime.now());
        log.trace("進(jìn)入了myjob任務(wù)");
        try {
            Thread.sleep(3000);
            log.trace("睡了3秒");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        log.info("結(jié)束任務(wù)!");
        System.out.println("end  My Job:" + LocalDateTime.now());
    }
}

控制臺(tái):

在這里插入圖片描述

根目錄生成文件:

在這里插入圖片描述

slf4j,logback,log4j的區(qū)別

slf4j(Simple logging Facade for Java) 簡(jiǎn)單日志門面,日志系統(tǒng)的實(shí)現(xiàn)進(jìn)行了具體的抽象化,只提供了統(tǒng)一的日志使用接口,沒(méi)有任何日志實(shí)現(xiàn),只有一個(gè)jar包(slf4j-api.jar)。

log4j和logback是具體的日志框架。這兩個(gè)日志框是同一個(gè)作者開(kāi)發(fā),后者性能更高。

logbak直接實(shí)現(xiàn)slf4j接口,性能更高

springboot默認(rèn)日子框架為logback

到此這篇關(guān)于SpringBoot使用slf4j日志并輸出到文件中的文章就介紹到這了,更多相關(guān)SpringBoot slf4j日志輸出到文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java客戶端線上Apollo服務(wù)端的實(shí)現(xiàn)

    java客戶端線上Apollo服務(wù)端的實(shí)現(xiàn)

    這篇文章主要介紹了java客戶端線上Apollo服務(wù)端的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 教你使用java實(shí)現(xiàn)去除各種空格

    教你使用java實(shí)現(xiàn)去除各種空格

    本文給大家匯總介紹了5種java中去除空格的方法,分別是String.trim()、str.replace(" ", "");、replaceAll(" +","");以及自定義的remove函數(shù),非常的簡(jiǎn)單實(shí)用,需要的小伙伴可以參考下。
    2015-03-03
  • 使用Autowired為什么會(huì)被IDEA警告最佳修改方法

    使用Autowired為什么會(huì)被IDEA警告最佳修改方法

    這篇文章主要介紹了使用Autowired為什么會(huì)被IDEA警告,應(yīng)該怎么修改最佳,除了使用@Autowired以外,我們其實(shí)也有幾種好用的方式,使用@Resource替代@Autiwired方法是其中一種,只需要改變一個(gè)注解,這里就不展示了,需要的朋友可以參考下
    2023-02-02
  • SpringBoot項(xiàng)目如何打包部署到服務(wù)器

    SpringBoot項(xiàng)目如何打包部署到服務(wù)器

    這篇文章主要介紹了SpringBoot項(xiàng)目如何打包部署到服務(wù)器問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • java實(shí)現(xiàn)隨機(jī)生成UUID

    java實(shí)現(xiàn)隨機(jī)生成UUID

    這篇文章主要介紹了java實(shí)現(xiàn)隨機(jī)生成UUID的函數(shù)代碼,有需要的小伙伴可以參考下。
    2015-07-07
  • Java實(shí)現(xiàn)常用加密算法——單向加密算法MD5和SHA

    Java實(shí)現(xiàn)常用加密算法——單向加密算法MD5和SHA

    本篇文章主要介紹了Java實(shí)現(xiàn)常用加密算法——單向加密算法MD5和SHA,信息加密后數(shù)據(jù)更安全,需要的朋友可以參考下。
    2016-10-10
  • PowerMockito的基本使用解析

    PowerMockito的基本使用解析

    這篇文章主要介紹了PowerMockito的基本使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringMVC實(shí)現(xiàn)文件上傳和下載功能

    SpringMVC實(shí)現(xiàn)文件上傳和下載功能

    這篇文章主要為大家詳細(xì)介紹了SpringMVC實(shí)現(xiàn)文件上傳和下載功能 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 看完這篇文章獲得一些java if優(yōu)化技巧

    看完這篇文章獲得一些java if優(yōu)化技巧

    if 是每個(gè)語(yǔ)言都有的語(yǔ)法,也是最基礎(chǔ)的語(yǔ)法。因?yàn)榇a本來(lái)就很晦澀,所以才有了程序員這個(gè)中間件,今天就聊一下我的一些關(guān)于 if 思路和總結(jié)
    2021-07-07
  • ThreadLocal內(nèi)存泄漏問(wèn)題解決方案

    ThreadLocal內(nèi)存泄漏問(wèn)題解決方案

    這篇文章主要介紹了ThreadLocal內(nèi)存泄漏問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評(píng)論

正定县| 弋阳县| 临夏市| 勃利县| 开江县| 西宁市| 宜宾县| 兖州市| 龙山县| 广州市| 湖南省| 成安县| 新闻| 安化县| 北碚区| 钟祥市| 邵阳市| 闸北区| 成安县| 郑州市| 绍兴市| 寿阳县| 稻城县| 永安市| 金平| 清镇市| 来安县| 兴和县| 昌都县| 启东市| 合阳县| 伊川县| 静宁县| 原阳县| 南澳县| 青海省| 闽清县| 湄潭县| 哈尔滨市| 澎湖县| 寻乌县|