1. 程式人生 > >Spring Boot系列——日誌配置

Spring Boot系列——日誌配置

日誌,通常不會在需求階段作為一個功能單獨提出來,也不會在產品方案中看到它的細節。但是,這絲毫不影響它在任何一個系統中的重要的地位。

為了保證服務的高可用,發現問題一定要即使,解決問題一定要迅速,所以生產環境一旦出現問題,預警系統就會通過郵件、簡訊甚至電話的方式實施多維轟炸模式,確保相關負責人不錯過每一個可能的bug。

預警系統判斷疑似bug大部分源於日誌。比如某個微服務介面由於各種原因導致頻繁調用出錯,此時呼叫端會捕獲這樣的異常並列印ERROR級別的日誌,當該錯誤日誌達到一定次數出現的時候,就會觸發報警。


try {

    呼叫某服務

} catch(Exception e) {

    LOG.error("錯誤資訊", e);

}

所以日誌至關重要,這篇就來介紹下在Spring Boot如何配置日誌。

Spring Boot預設日誌系統

Spring Boot預設使用LogBack日誌系統,如果不需要更改為其他日誌系統如Log4j2等,則無需多餘的配置,LogBack預設將日誌列印到控制檯上。

如果要使用LogBack,原則上是需要新增dependency依賴的


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

但是因為新建的Spring Boot專案一般都會引用spring-boot-starter或者spring-boot-starter-web,而這兩個起步依賴中都已經包含了對於spring-boot-starter-logging的依賴,所以,無需額外新增依賴。

我們基於《沒做過大專案,但我會建大專案》中建立的專案,啟動springboot-demo專案,可以看到列印的日誌資訊如下。

以上至預設配置啟動下的日誌顯示情況,如果需要做一些定製的日誌配置比如將日誌儲存到檔案等應該如何配置,下面就通過幾個小問題來看看Spring Boot下是如何解決這些問題的。

如何在專案中列印日誌

新建一個配置類LogConfig,注入一個Bean,並在方法中列印日誌


package com.jackie.springbootdemo.config;

import com.jackie.springbootdemo.model.Person;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration public class LogConfig {
    private static final Logger LOG = LoggerFactory.getLogger(LogConfig.class);

    @Bean
 public Person logMethod() {
        LOG.info("==========print log==========");
        return new Person();
    }
}

執行SpringBootDemoApplication,可以看到控制檯的日誌

Spring Boot預設的日誌級別為INFO,這裡列印的是INFO級別的日誌所以可以顯示。

很多開發者在日常寫private static final Logger LOG = LoggerFactory.getLogger(LogConfig.class);總覺得後面的LogConfig.class可有可無,因為隨便寫個其他類也不會報錯,但是準確編寫class資訊能夠提供快速定位日誌的效率。

我們看到列印的日誌內容左側就是對應的類名稱,這個是通過private static final Logger LOG = LoggerFactory.getLogger(LogConfig.class);實現的。

如果將LogConfig.class換成xxx.class,輸出日誌就會顯示對應的xxx類名。這樣宣告的好處就是方便定位日誌。

如何將日誌資訊儲存到檔案

在本機環境,我們習慣在控制檯看日誌,但是線上我們還是要通過將日誌資訊儲存到日誌檔案中,查詢日誌檔案即可。

那麼應該如何配置才能將日誌資訊儲存到檔案呢?

在我們建立的springboot-demo專案中,resources目錄下有個application.properties檔案(如果是application.yml檔案也是同樣的道理,只是採用的不同的編寫風格而已)。新增如下配置


logging.path=/Users/jackie/workspace/rome/ 
logging.file=springbootdemo.log

logging.path

該屬性用來配置日誌檔案的路徑

logging.file

該屬性用來配置日誌檔名,如果該屬性不配置,預設檔名為spring.log

執行SpringBootDemoApplication

可以看到在指定路徑下生成了springbootdemo.log檔案,該檔案內容和控制檯列印內容一致。

如果註釋logging.file=springbootdemo.log則生成預設檔名spring.log

如何設定日誌級別

日誌級別總共有TARCE < DEBUG < INFO < WARN < ERROR < FATAL ,且級別是逐漸提供,如果日誌級別設定為INFO,則意味TRACE和DEBUG級別的日誌都看不到。

上例中我們列印了一個INFO級別的日誌,因為Spring Boot預設級別就是INFO,如果我們改為WARN,是否還能看到這行日誌資訊。

logging.level

該屬性用於配置日誌級別。

在applicaition.properties中新增


logging.level.root=warn

這裡是用的root級別,即專案的所有日誌,我們也可以使用package級別,即指定包下使用相應的日誌級別,下面再看。

啟動SpringBootDemoApplication

你沒看錯,這個專案是成功啟動了,但是幾乎沒有內容,這是因為之前列印的日誌級別都是INFO,這裡設定為WARN,所以INFO級別的日誌都不顯示。

這裡我們可以改動root還是INFO級別,將指定包下的日誌級別設定為WARN


logging.level.root=INFO

logging.level.com.jackie.springbootdemo.config=WARN

啟動SpringBootDemoApplication

可以看到除了LogConfig類中的INFO級別的日誌沒有打印出來,其他的INFO級別的日誌都正常輸出了。

如何定製自己的日誌格式

在application.properties中新增


logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n 
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n

logging.pattern.console

該屬性用於定製日誌輸出格式。

上述配置的編碼中,對應符號的含義如下


%d{HH:mm:ss.SSS}——日誌輸出時間

%thread——輸出日誌的程序名字,這在Web應用以及非同步任務處理中很有用

%-5level——日誌級別,並且使用5個字元靠左對齊

%logger- ——日誌輸出者的名字

%msg——日誌訊息

%n——平臺的換行符

啟動SpringBootDemoApplication

限於篇幅,還有相關特性,這裡不一一陳述了。

如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!如果您想持續關注我的文章,請掃描二維碼,關注JackieZheng的微信公眾號,我會將我的文章推送給您,並和您一起分享我日常閱讀過的優質文章。

相關推薦

Spring Boot系列——日誌配置

日誌,通常不會在需求階段作為一個功能單獨提出來,也不會在產品方案中看到它的細節。但是,這絲毫不影響它在任何一個系統中的重要的地位。 為了保證服務的高可用,發現問題一定要即使,解決問題一定要迅速,所以生產環境一旦出現問題,預警系統就會通過郵件、簡訊甚至電話的方式實施多維轟炸模式,確保相關負責人不錯過每一個可能的

spring boot log 日誌配置

思路:  1.在yml 檔案中配置log日誌路徑  2.在java中引入log包呼叫 inif()方法寫入內容  3.在yml配置的路徑中生成log檔案 .java @RestController public class DeptControl

spring boot slf4j日誌配置

開發工具 idea2017.1.5 jdk版本 1.8 該專案是maven專案 使用了spring boot,是一個日誌配置的小demo 1.專案結構 2.pom.xml檔案 <?xml version="1.0"

Spring Boot系列教程六:日誌輸出配置log4j2

一.前言  spring boot支援的日誌框架有,logback,Log4j2,Log4j和Java Util  Logging,預設使用的是logback日誌框架,筆者一直在使用log4j2,並且看過某博主寫的一篇這幾個日誌框架的效能比對,決定仍使用log4j2,本文章

Spring Boot 系列日誌動態配置詳解

>世界上最快的捷徑,就是腳踏實地,本文已收錄[架構技術專欄](http://www.jiagoujishu.com/)關注這個喜歡分享的地方。 開源專案: - 分散式監控(Gitee GVP最有價值開源專案 ):https://gitee.com/sanjiankethree/cubic - 攝像頭視

Spring Boot系列教程四:配置文件詳解properties

date int ava ota axu return 端口 rand work 一.配置隨機數,使用隨機數 在application.properties文件添加配置信息 1 #32位隨機數 2 woniu.secret=${random.value} 3 #隨機整數

關於spring-boot日誌輸出到控制臺和指定文件的配置

add contex ring level true source ont utf onf (1)問題:在本地使用spring-boot開發的程序,一直想讓文件按照天輸出到某個文件夾下面。但是一直成功。 解決過程: 想到日誌優先想著配置lo

Spring Boot預設日誌配置.md

Sprong Boot使用的預設日誌框架是Logback: 預設的日誌輸出格式如下: 2016-04-13 08:23:50.120 INFO 37397 --- [ m

Spring Boot + Log4j2 日誌框架配置 (Maven)

參考Spring Boot官方文件 日誌部分 Spring Boot預設情況下,當使用"Starters" 使用Logback輸出日誌 , 還包括適當的Logback路由, 確保其他的日誌框架(Java Util Logging, Commons Logging, Lo

Spring boot logback日誌輸出多環境配置

本人專案結構如下圖:特備註意logback.xml必須要改成logback-spring.xml,參看https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-cus

spring boot 系列之六:深入理解spring boot的自動配置

我們知道,spring boot自動配置功能可以根據不同情況來決定spring配置應該用哪個,不應該用哪個,舉個例子: Spring的JdbcTemplate是不是在Classpath裡面?如果是,並且DataSource也存在,就自動配置一個JdbcTemplate的Bean Thymeleaf是不

spring boot控制檯日誌yml配置

日誌級別:trace<debug<info<warn<error<fatal<off logging: pattern: console: "%d - %msg%n" #path: /var/log/tomcat #f

Spring-boot系列(6):整合fastjson訊息檢視配置

通過fashjson訊息檢視配置可以控制json返回的情況,例如:資料該欄位為空,返回前端值預設是null,可以使用WriteNullListAsEmpty 改為”“。 springboot整合 在原來專案上增加 依賴 <!--引入fastj

Spring Boot系列04-AOP配置

閱讀這篇博文時,假定讀者已經掌握了Spring Boot+maven開發應用的入門技巧, 初次接觸Spring Boot,那也沒關係,移步Spring Boot + maven 開發的入門教程, 10分鐘完成你的第一個Spring Boot應用 1. 使用

Spring Boot 系列(三)屬性配置&自定義屬性配置

在使用spring boot過程中,可以發現專案中只需要極少的配置就能完成相應的功能,這歸功於spring boot中的模組化配置,在pom.xml中依賴的每個Starter都有預設配置,而這些預設配置足以滿足正常的功能開發。 如果需要修改自定義修

Spring Boot的常見配置項解析

ava efi article 框架 ring 智能 1.7 version parent 1.spring-boot-starter-parent:springboot官方推薦的maven管理工具,最簡單的做法就是繼承它。 spring-boot-starter-pare

Spring Boot簡單xml配置集成mybatis

pat class user rom onf int 文件中 http property 一、xml配置版 1.properties文件中增加的配置:   mybatis.config-locations=classpath:mybatis/mybatis-config.x

spring boot 加載配置 文件

path 方式 屬性 pro rri config 有時 命令行 配置 在springboot啟動的過程中,默契情況下會在classpath路徑下加載application.properties當做系統配置文件,但有時候我們想要替換成另一個文件,可以 通過以下方式: 一

Spring Boot系列教程七:Spring boot集成MyBatis

override fill sql water sso avi size logs index 一.創建項目 項目名稱為 “springboot_mybatis_demo”,創建過程中勾選 “Web”,“MyBatis”,“MySQL”,第一次創建Maven

Spring Boot系列教程八: Mybatis使用分頁插件PageHelper

tid bind color clas owb 如何 cto 集成 使用 一.前言 上篇博客中介紹了spring boot集成mybatis的方法,基於上篇文章這裏主要介紹如何使用分頁插件PageHelper。在MyBatis中提供了攔截器接口,我們可以使用PageHelp