Spring Boot日志控制詳解
Spring Boot對日志的處理,和我們平時的日志處理完全一致,通過logback.xml進(jìn)行日志管理功能。為了簡便,這里采用“Spring Boot構(gòu)建框架”一章節(jié)使用的工程,講述如何在Spring Boot中處理日志。
第一步,雖然Spring Boot中application.properties配置文件提供了日志的配置,但是個人更傾向于舊的配置方式。在src/main/resources目錄中增加logback.xml日志文件,文件內(nèi)容如下(配置相對簡單,個人請根據(jù)工程情況,進(jìn)行相應(yīng)的配置):
<configuration scan="true" scanPeriod="10 seconds">
<include resource="org/springframework/boot/logging/logback/base.xml" />
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}/info.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/info-%d{yyyyMMdd}.log.%i
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>500MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>2</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n
</Pattern>
</layout>
</appender>
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<File>${LOG_PATH}/error.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/error-%d{yyyyMMdd}.log.%i
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>500MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>2</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n
</Pattern>
</layout>
</appender>
<logger name="com.example" level="DEBUG">
<appender-ref ref="baselog" />
</logger>
<root level="INFO">
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</configuration>
注意:
1)控制臺和日志文件的字符集
2)日志文件的存放位置,須要遵守Linux的命名規(guī)則
第二步,在application.properties中指定logback.xml和日志生成的路徑,如下:
logging.config=classpath:logback.xml logging.path=/workspace/log
第三步,新建HelloController類,具體內(nèi)容如下:
package com.example;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
protected static Logger logger=LoggerFactory.getLogger(HelloController.class);
@RequestMapping("/")
public String helloworld(){
logger.debug("訪問hello");
return "Hello world!";
}
@RequestMapping("/hello/{name}")
public String helloName(@PathVariable String name){
logger.debug("訪問 helloName,Name={}",name);
return "Hello "+name;
}
}
注意:在添加引用時,日志的包一定是org.slf4j.Logger、org.slf4j.LoggerFactory類。
第四步,測試
1)運行主程序
2)在瀏覽器中依次輸入
http://localhost:8080/
http://localhost:8080/hello/素文宅博客
3)由于我的工程在D盤所有log日志文件所在的目錄找到D:/workspace/log文件夾下,日志文件的名稱是在配置文件logback.xml中設(shè)置的。
在application.properties可以配置日志相關(guān)屬性
控制臺輸出
日志級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設(shè)置為WARN,則低于WARN的信息都不會輸出。
Spring Boot中默認(rèn)配置ERROR、WARN和INFO級別的日志輸出到控制臺。您還可以通過啟動您的應(yīng)用程序--debug標(biāo)志來啟用“調(diào)試”模式(開發(fā)的時候推薦開啟),以下兩種方式皆可:
1)在運行命令后加入--debug標(biāo)志,如:$ java -jar springTest.jar --debug
2)在application.properties中配置debug=true,該屬性置為true的時候,核心Logger(包含嵌入式容器、hibernate、spring)會輸出更多內(nèi)容,但是你自己應(yīng)用的日志并不會輸出為DEBUG級別。
文件輸出
默認(rèn)情況下,Spring Boot將日志輸出到控制臺,不會寫到日志文件。如果要編寫除控制臺輸出之外的日志文件,則需在application.properties中設(shè)置logging.file或logging.path屬性。
1)logging.file,設(shè)置文件,可以是絕對路徑,也可以是相對路徑。如:logging.file=my.log
2)logging.path,設(shè)置目錄,會在該目錄下創(chuàng)建spring.log文件,并寫入日志內(nèi)容,如:logging.path=/var/log
如果只配置logging.file,會在項目的當(dāng)前路徑下生成一個 xxx.log 日志文件。如果只配置 logging.path,在 /var/log文件夾生成一個日志文件為 spring.log
注意:二者不能同時使用,如若同時使用,則只有logging.file生效。默認(rèn)情況下,日志文件的大小達(dá)到10MB時會切分一次,產(chǎn)生新的日志文件,默認(rèn)級別為:ERROR、WARN、INFO。
級別控制
所有支持的日志記錄系統(tǒng)都可以在Spring環(huán)境中設(shè)置記錄級別(在application.properties中設(shè)置)
格式為:'logging.level.* = LEVEL'
logging.level:日志級別控制前綴,*為包名或Logger名
LEVEL:選項TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
實例:
logging.level.com.dudu=DEBUG:com.example包下所有class以DEBUG級別輸出
logging.level.root=WARN:root日志以WARN級別輸出
自定義日志配置
由于日志服務(wù)一般都在ApplicationContext創(chuàng)建前就初始化了,它并不是必須通過Spring的配置文件控制。因此通過系統(tǒng)屬性和傳統(tǒng)的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。
根據(jù)不同的日志系統(tǒng),你可以按如下規(guī)則組織配置文件名,就能被正確加載:
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官方推薦優(yōu)先使用帶有-spring的文件名作為你的日志配置(使用logback-spring.xml名稱,而不是logback.xml名稱),命名為logback-spring.xml的日志配置文件,spring boot可以為它添加一些spring boot特有的配置項。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Redis?+?Java攔截器實現(xiàn)用戶匿名和非匿名訪問
本文主要介紹了Redis?+?Java攔截器實現(xiàn)用戶匿名和非匿名訪問,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
SpringCloud服務(wù)實現(xiàn)同時使用eureka和nacos方法
這篇文章主要介紹了SpringCloud服務(wù)實現(xiàn)同時使用eureka和nacos方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01
Java之maven打完jar包之后將jar包放到指定位置匯總
這篇文章主要介紹了Java之maven打完jar包之后將jar包放到指定位置匯總,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
Spring注解驅(qū)動之@EventListener注解使用方式
這篇文章主要介紹了Spring注解驅(qū)動之@EventListener注解使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09

