背景介紹
在開發(fā)中,我們經常使用 System.out.println() 來打印一些信息,但是這樣不好,因為大量的使用 System.out 會增加資源的消耗。我們實際項目中使用的是 slf4j 的 logback 來輸出日志,效率挺高的,Spring Boot 提供了一套日志系統(tǒng),logback 是最優(yōu)的選擇。
引用百度百科里的一段話:
SLF4J,即簡單日志門面(Simple Logging Facade for Java),不是具體的日志解決方案,它只服務于各種各樣的日志系統(tǒng)。按照官方的說法,SLF4J是一個用于日志系統(tǒng)的簡單Facade,允許最終用戶在部署其應用時使用其所希望的日志系統(tǒng)。
這段的大概意思是:你只需要按統(tǒng)一的方式寫記錄日志的代碼,而無需關心日志是通過哪個日志系統(tǒng),以什么風格輸出的。因為它們取決于部署項目時綁定的日志系統(tǒng)。例如,在項目中使用了 slf4j 記錄日志,并且綁定了 log4j(即導入相應的依賴),則日志會以 log4j 的風格輸出;后期需要改為以 logback 的風格輸出日志,只需要將 log4j 替換成 logback 即可,不用修改項目中的代碼。這對于第三方組件的引入的不同日志系統(tǒng)來說幾乎零學習成本,況且它的優(yōu)點不僅僅這一個而已,還有簡潔的占位符的使用和日志級別的判斷。
使用slf4j
使用 slf4j 記錄日志非常簡單,直接使用 LoggerFactory 創(chuàng)建即可。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Test {
private static final Logger logger = LoggerFactory.getLogger(Test.class);
// ……
}
application.yml 中對日志的配置
我們看一下 application.yml 文件中對日志的配置:
logging:
config: logback.xml
level:
com.itcodai.course03.dao: trace
logging.config 是用來指定項目啟動的時候,讀取哪個配置文件,這里指定的是日志配置文件是根路徑下的 logback.xml 文件,關于日志的相關配置信息,都放在 logback.xml 文件中了。logging.level 是用來指定具體的 mapper 中日志的輸出級別,上面的配置表示 com.itcodai.course03.dao 包下的所有 mapper 日志輸出級別為 trace,會將操作數(shù)據(jù)庫的 sql 打印出來,開發(fā)時設置成 trace 方便定位問題,在生產環(huán)境上,將這個日志級別再設置成 error 級別即可(本節(jié)課不討論 mapper 層,在后面 Spring Boot 集成 MyBatis 時再詳細討論)。
常用的日志級別按照從高到低依次為:ERROR、WARN、INFO、DEBUG。
logback.xml 配置文件解析
在上面 application.yml 文件中,我們指定了日志配置文件 logback.xml,logback.xml 文件中主要用來做日志的相關配置。在 logback.xml 中,我們可以定義日志輸出的格式、路徑、控制臺輸出格式、文件大小、保存時長等等。下面來分析一下:
<1>定義日志輸出格式和存儲路徑
<configuration>
<property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<property name="FILE_PATH" value="D:/logs/course03/demo.%d{yyyy-MM-dd}.%i.log" />
</configuration>
我們來看一下這個定義的含義:首先定義一個格式,命名為 “LOG_PATTERN”,該格式中 %date 表示日期,%thread 表示線程名,%-5level 表示級別從左顯示5個字符寬度,%logger{36} 表示 logger 名字最長36個字符,%msg 表示日志消息,%n 是換行符。
然后再定義一下名為 “FILE_PATH” 文件路徑,日志都會存儲在該路徑下。%i 表示第 i 個文件,當日志文件達到指定大小時,會將日志生成到新的文件里,這里的 i 就是文件索引,日志文件允許的大小可以設置,下面會講解。這里需要注意的是,不管是 windows 系統(tǒng)還是 Linux 系統(tǒng),日志存儲的路徑必須要是絕對路徑。
<2>定義控制臺輸出
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 按照上面配置的LOG_PATTERN來打印日志 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
</configuration>
使用 節(jié)點設置個控制臺輸出(class="ch.qos.logback.core.ConsoleAppender")的配置,定義為 “CONSOLE”。使用上面定義好的輸出格式(LOG_PATTERN)來輸出,使用 ${} 引用進來即可
<3>定義日志文件的相關參數(shù)
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按照上面配置的FILE_PATH路徑來保存日志 -->
<fileNamePattern>${FILE_PATH}</fileNamePattern>
<!-- 日志保存15天 -->
<maxHistory>15</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 單個日志文件的最大,超過則新建日志文件存儲 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- 按照上面配置的LOG_PATTERN來打印日志 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
</configuration>
使用 定義一個名為 “FILE” 的文件配置,主要是配置日志文件保存的時間、單個日志文件存儲的大小、以及文件保存的路徑和日志的輸出格式。
<4>定義日志輸出級別
<configuration>
<logger name="com.itcodai.course03" level="INFO" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
有了上面那些定義后,最后我們使用 來定義一下項目中默認的日志輸出級別,這里定義級別為 INFO,然后針對 INFO 級別的日志,使用 引用上面定義好的控制臺日志輸出和日志文件的參數(shù)。這樣 logback.xml 文件中的配置就設置完了。
實際使用:使用Logger在項目中打印日志
在代碼中,我們一般使用 Logger 對象來打印出一些 log 信息,可以指定打印出的日志級別,也支持占位符,很方便。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class TestController {
private final static Logger logger = LoggerFactory.getLogger(TestController.class);
@RequestMapping("/log")
public String testLog() {
logger.debug("=====測試日志debug級別打印====");
logger.info("======測試日志info級別打印=====");
logger.error("=====測試日志error級別打印====");
logger.warn("======測試日志warn級別打印=====");
// 可以使用占位符打印出一些參數(shù)信息
String str1 = "blog.itcodai.com";
String str2 = "blog.csdn.net/eson_15";
logger.info("======倪升武的個人博客:{};倪升武的CSDN博客:{}", str1, str2);
return "success";
}
}
啟動該項目,在瀏覽器中輸入 localhost:8080/test/log 后可以看到控制臺的日志記錄:文章來源:http://www.zghlxwxcb.cn/news/detail-417622.html
======測試日志info級別打印=====
=====測試日志error級別打印====
======測試日志warn級別打印=====
======倪升武的個人博客:blog.itcodai.com;倪升武的CSDN博客:blog.csdn.net/eson_15
因為 INFO 級別比 DEBUG 級別高,所以 debug 這條沒有打印出來,如果將 logback.xml 中的日志級別設置成 DEBUG,那么四條語句都會打印出來,這個大家自己去測試了。同時可以打開 D:\logs\course03\ 目錄,里面有剛剛項目啟動,以后后面生成的所有日志記錄。在項目部署后,我們大部分都是通過查看日志文件來定位問題。文章來源地址http://www.zghlxwxcb.cn/news/detail-417622.html
到了這里,關于SpringBoot——Slf4j的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!