默認配置
日誌級別從低到高分爲:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL。
如果設置爲 INFO ,則低於 INFO 的信息都不會輸出其他的依次類推
默認情況下,Spring Boot會用Logback來記錄內部日誌,並用INFO級別輸出到控制檯你不用做任何設置
從上圖可以看到,日誌輸出內容元素具體如下:
-
時間日期:精確到毫秒
-
日誌級別:
-
進程ID
-
分隔符:— 標識實際日誌的開始
-
線程名:方括號括起來(可能會截斷控制檯輸出)
-
Logger名:通常使用源代碼的類名
-
日誌內容
自己程序添加日誌
基於類的方式
以後開發的時候,日誌記錄方法的調用,不應該來直接調用日誌的實現類,而是調用日誌抽象層裏面的方法
這和我們單獨使用日誌jar包有所不同
package com.fashvn.ctmsdata.logtest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
private static final Logger logger=LoggerFactory.getLogger(LogTest.class);
public static void main(String[] args) {
logger.error("簡單的日誌記錄測試:{}+{}={}",1,2,3);
}
}
基於註解方式
上面那種方式每次都要重複添加記錄器那一行代碼這裏可以基於註解方式但是需要使用lombok前提你IDEA配置了lombok插件然後maven添加了lombok依賴纔可以
package com.fashvn.ctmsdata.logtest;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class LogTest {
public static void main(String[] args) {
log.error("簡單的日誌記錄測試:{}+{}={}", 1, 2, 3);
}
}
現在你就可以愉快的在自己程序了使用日誌了
修改配置
您還可以通過啓動您的應用程序 --debug 標誌來啓用“調試”模式(開發的時候推薦開啓),以下兩種方式皆可:
- 在運行命令後加入–debug標誌,如:
$ java -jar springTest.jar --debug
- 在application.properties中配置debug=true,該屬性置爲true的時候,核心Logger(包含嵌入式容器、hibernate、spring)會輸出更多內容,但是你自己應用的日誌並不會輸出爲DEBUG級別。
如何你的日誌記錄需求簡單你可以通過springboot提供的屬性進行日誌的簡單配置複雜日誌記錄功能需要單獨定義配置文件
logging:
# 將日誌輸出到文件 注意name和path同時使用只會生效後一個配置
file:
# 日誌名稱可以是相對路徑和絕對路徑
name:
#日誌路徑 可以是相對路徑和絕對路徑,幫我們自動生成spring.log的日誌文件
path:
# 日誌文件大小默認是10M單位是KB
max-size:
# 每天切割打包日誌的數量默認是7
max-history:
#日誌格式
pattern:
#輸出到日誌文件日誌格式
file:
#輸出到控制檯日誌格式
# %clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
console:
#時間格式 默認 yyyy-MM-dd HH:mm:ss.SSS
dateformat:
#日誌等級對齊方式 默認%5p日誌級別輸出右對齊
level:
#切割文件名稱 默認是${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz 如過單個日誌文件超過定義的大小就切割打包
rolling-file-name:
#需要記錄日誌的等級
level:
# 根目錄所以class日誌記錄等級
root: debug
# 自定義對應包下class 日誌等級
com.fashvn.ctmsdata: debug
自定義日誌配置
根據不同的日誌系統,你可以按如下規則組織配置文件名,就能被正確加載:
-
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官方推薦優先使用帶有-spring的文件名作爲你的日誌配置(如使用logback-spring.xml,而不是logback.xml),命名爲logback-spring.xml的日誌配置文件,spring boot可以爲它添加一些spring boot特有的配置項
如果你即想完全掌控日誌配置,但又不想用logback.xml作爲Logback配置的名字,application.yml可以通過logging.config屬性指定自定義的名字
logging.config=classpath:logging-config.xml
雖然一般並不需要改變配置文件的名字,但是如果你想針對不同運行時Profile使用不同的日誌配置,這個功能會很有用。
一般不需要這個屬性,而是直接在logback-spring.xml中使用springProfile配置,不需要logging.config指定不同環境使用不同配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!--
scan true:配置文件如果發生改變,將會被重新加載,默認值爲true
scanPeriod:設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。默認的時間間隔爲1分鐘,當scan爲true時,此屬性生效。
debug:當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--設置上下文名稱
每個logger都關聯到logger上下文,默認上下文名稱爲“default”。
但可以使用設置成其他名字,用於區分不同應用程序的記錄。一旦設置,不能修改,
可以通過%contextName來打印日誌上下文名稱,一般來說我們不用這個屬性,可有可無。
-->
<contextName>logback-demo</contextName>
<!--設置變量
用來定義變量值的標籤, 有兩個屬性,name和value;
其中name的值是變量的名稱,value的值時變量定義的值。
通過定義的值會被插入到logger上下文中。定義變量後,可以使“${}”來使用變量。
-->
<property name="logback.logdir" value="/Users/inke/dev/log/tomcat"/>
<property name="logback.appname" value="app"/>
<!--appender用來格式化日誌輸出節點
有倆個屬性name和class
class用來指定哪種輸出策略
常用就是控制檯輸出策略和文件輸出策略。
-->
<!--輸出到控制檯 ConsoleAppender
可以看到layout和encoder,都可以將事件轉換爲格式化後的日誌記錄,但是控制檯輸出使用layout,文件輸出使用encoder,具體原因可以看
https://blog.csdn.net/cw_hello1/article/details/51969554
-->
<appender name="consoleLog1" class="ch.qos.logback.core.ConsoleAppender">
<!--展示格式 layout-->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d -1 %msg%n</pattern>
</layout>
</appender>
<!--輸出到控制檯 ConsoleAppender-->
<appender name="consoleLog2" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d -2 %msg%n</pattern>
</encoder>
</appender>
<!--輸出到控制檯 ConsoleAppender
%d{HH: mm:ss.SSS}——日誌輸出時間
%thread——輸出日誌的進程名字,這在Web應用以及異步任務處理中很有用
%-5level——日誌級別,並且使用5個字符靠左對齊
%logger{36}——日誌輸出者的名字
%msg——日誌消息
%n——平臺的換行符
ThresholdFilter爲系統定義的攔截器,
例如我們用ThresholdFilter來過濾掉ERROR級別以下的日誌不輸出到文件中。如果不用記得註釋掉,不然你控制檯會發現沒日誌~
-->
<appender name="consoleLog3" class="ch.qos.logback.core.ConsoleAppender">
<!--展示格式 layout-->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
</pattern>
</layout>
<!--
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
-->
</appender>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果只是想要 Info 級別的日誌,只是過濾 info 還是會輸出 Error 日誌,因爲 Error 的級別高,
所以我們使用下面的策略,可以避免輸出 Error 的日誌-->
<!--只是不想要error其他都要-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--過濾 Error-->
<level>ERROR</level>
<!--匹配到就禁止-->
<onMatch>DENY</onMatch>
<!--沒有匹配到就允許-->
<onMismatch>ACCEPT</onMismatch>
</filter>
<!--日誌名稱,如果沒有File 屬性,那麼只會使用FileNamePattern的文件路徑規則
如果同時有<File>和<FileNamePattern>,那麼當天日誌是<File>,明天會自動把今天
的日誌改名爲今天的日期。即,<File> 的日誌都是當天的。
-->
<File>${logback.logdir}/info.${logback.appname}.log</File>
<!--滾動策略,按照時間滾動 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路徑,定義了日誌的切分方式——把每一天的日誌歸檔到一個文件中,以防止日誌填滿整個磁盤空間-->
<FileNamePattern>${logback.logdir}/info.${logback.appname}.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--只保留最近90天的日誌-->
<maxHistory>90</maxHistory>
<!--用來指定日誌文件的上限大小,那麼到了這個值,就會刪除舊的日誌-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
<!--日誌輸出編碼格式化-->
<encoder>
<charset>UTF-8</charset>
<pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
</encoder>
</appender>
<!--輸出到文件
另一種常見的日誌輸出到文件,隨着應用的運行時間越來越長,日誌也會增長的越來越多,
將他們輸出到同一個文件並非一個好辦法。RollingFileAppender用於切分文件日誌:
-->
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果只是想要 Error 級別的日誌,那麼需要過濾一下,默認是 info 級別的,ThresholdFilter-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>Error</level>
</filter>
<!--日誌名稱,如果沒有File 屬性,那麼只會使用FileNamePattern的文件路徑規則
如果同時有<File>和<FileNamePattern>,那麼當天日誌是<File>,明天會自動把今天
的日誌改名爲今天的日期。即,<File> 的日誌都是當天的。
-->
<File>${logback.logdir}/error.${logback.appname}.log</File>
<!--滾動策略,按照時間滾動 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路徑,定義了日誌的切分方式——把每一天的日誌歸檔到一個文件中,以防止日誌填滿整個磁盤空間-->
<FileNamePattern>${logback.logdir}/error.${logback.appname}.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--只保留最近90天的日誌-->
<maxHistory>90</maxHistory>
<!--用來指定日誌文件的上限大小,那麼到了這個值,就會刪除舊的日誌-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
<!--日誌輸出編碼格式化-->
<encoder>
<charset>UTF-8</charset>
<pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
</encoder>
</appender>
<!--必選節點
root節點是必選節點,用來指定最基礎的日誌輸出級別,只有一個level屬性。
level:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能設置爲INHERITED或者同義詞NULL。默認是DEBUG。
可以包含零個或多個元素,標識這個appender將會添加到這個loger。
-->
<!--指定最基礎的日誌輸出級別-->
<root level="INFO">
<!--appender將會添加到這個loger-->
<appender-ref ref="consoleLog1"/>
<appender-ref ref="consoleLog2"/>
<appender-ref ref="consoleLog3"/>
</root>
</configuration>