Spring Boot日志使用


前言: 這是我第一次仔細研究Spring Boot相關的知識,就拿日志下手了,歡迎大家指點

Spring Boot日志關系

這個是Spring Boot的啟動器,我們點擊spring-boot-starter

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

這個spring-boot-starter-logging就是Spring Boot用來做日志功能的

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

底層依賴關系

通過這張圖我們能總結出

  1. Spring Boot底層也是使用slf4j+logback的方式進行日志記錄

  2. Spring Boot也把其他的日志都替換成了slf4j;

那么Spring Boot是如何將這些日志都替換成slf4j的呢?我們找到其中的一個jcl-over-slf4j

我們可以看到里面有個commons.logging,里面實現的正是SLF4JLogFactory

@SuppressWarnings("rawtypes")
public abstract class LogFactory {

    static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J = "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";

    static LogFactory logFactory = new SLF4JLogFactory();

那么我們如果要引入其它框架,一定要把這個框架的默認日志依賴移除掉。

Spring Boot用的是commons-logging

	<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<exclusions>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

SpringBoot能自動適配所有的日志,而且底層使用slf4j+logback的方式記錄日志,引入其他框架的時候,只需要把這個框架依賴的日志框架排除掉即可;

日志使用

默認配置

Spring Boot默認幫我們配置好了日志;日志有五種級別,由低到高是trace<debug<info<warn<error,可以調整輸出的日志級別;日志就只會在這個級別及以后的高級別生效,Spring Boot默認給我們使用的是info級別的,沒有指定級別的就用SpringBoot默認規定的級別;root級別

為什么也叫root級別呢,依次點擊文件目錄下的這些文件

graph LR A[External Libraries]-->B[springframework.boot.spring-boot] B-->C[org] C-->D[springframework] D-->E[boot] E-->F[logging] F-->G[logback] G-->H[base.xml]

從圖中我們能看出,Spring Boot有個默認標簽<root>里面指定的級別正是INFO,這也就是為什么默認級別叫root級別,作為一個小知識點給大家擴展了一下,下面進入正題,我們在測試類中寫下以下代碼。

//記錄器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
public void contextLoads() {
	logger.trace("這是trace日志...");
	logger.debug("這是debug日志...");
	//SpringBoot默認給我們使用的是info級別的,沒有指定級別的就用SpringBoot默認規定的級別;root級別
	logger.info("這是info日志...");
	logger.warn("這是warn日志...");
	logger.error("這是error日志...");
	}

現在我們啟動這個測試類

可以看出只打印出了info及以后的日志記錄,也印證了前面所說的

修改默認配置

接下來我們來修改Spring Boot的默認配置

  1. 修改默認級別
  2. 輸出日志文件
  3. 修改打印格式

以下代碼均在application.properties文件中寫入

修改默認級別

logging.level.com.atguigu=trace

這行代碼指定了Spring Boot會輸出trace及以后級別的日志記錄,level以后的路徑是當前項目的路徑

輸出日志文件

輸出日志有兩種方法

  1. logging.file
  2. logging.path

logging.file

輸出指定文件名的日志,通過這個我們可以指定輸出的日志文件名的名稱

logging.file=f:/springlog/springboot.log

我們會在這個路徑下生成一個叫springboot.log的日志,如果沒有指定路徑,會在當前項目下生成springboot.log日志

logging.path

在f盤下創建springlogpath文件夾和里面的log文件;使用 spring.log 作為默認文件

logging.path=f:/springlogpath
logging.file logging.path Example Description
(none) (none) 只在控制台輸出
指定文件名 (none) my.log 輸出日志到my.log文件
(none) 指定目錄 /var/log 輸出到指定目錄的 spring.log 文件中

如果都不指定,默認只在控制台輸出,如果同時指定,只有logging.file生效

修改打印格式

我們可以自定義日志輸入的格式同樣有兩種方法

  1. logging.pattern.console
  2. logging.pattern.file

logging.pattern.console

修改控制台輸出日志格式

logging.pattern.console=%d{yyyy-MM-dd} ----> [%thread] ----> %-5level---> %logger{50} ---> %msg%n

我們用---->的方式來作為控制台打印日志的連接

如我們所預期的一樣,每個log中都是用的---->來連接的

logging.pattern.file

修改指定文件中輸出日志的格式

logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n

日志文件里我們用===來作為連接看效果

    日志輸出格式:
		%d表示日期時間,
		%thread表示線程名,
		%-5level:級別從左顯示5個字符寬度
		%logger{50} 表示logger名字最長50個字符,否則按照句點分割。 
		%msg:日志消息,
		%n是換行符
    -->
    %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

這個就是日志輸出的格式,大家可以照着這個來自定義自己的日志

指定配置

我們可以給類路徑下放上每個日志框架自己的配置文件;SpringBoot就不使用他默認配置的了

Logging System Customization
Logback logback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy
Log4j2 log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging) logging.properties

這是每個日志對應的配置文件名稱

如果我們放的是logback.xml,他能直接就被日志框架識別,

而Spring Boot官網建議我們用的是logback-spring.xml來擴展高級功能

如果我們放的是logback-spring.xml日志框架就不能識別配置文件從而直接加載日志的配置項,由Spring Boot解析日志配置,我們可以使用Spring Boot的高級Profile功能

<springProfile name="dev">
    <!-- configuration to be enabled when the "staging" profile is active -->
  	可以指定某段配置只在某個環境下生效
</springProfile>

在配置文件中加上這個標簽就可以某段配置只在指定環境下生效,比如這段代碼就會在dev環境下才生效

切換日志框架

我們可以在Spring Boot官網找到這張圖片

如果我們想使用log4j,那么我們需要導入log4j一系列的所有包。slf4j-apislf4j-log4j12log4j

Spring Boot日志使用到這就到達尾聲了,如果有說的不對的地方還望指出,一起進步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM