一、引言
SpringBoot內部集成了LogBack日志依賴,SpringBoot默認使用LogBack記錄日志信息,默認根據base.xml配置內容來輸出到控制臺和文件之中。
本文將簡單敘述如何使用 logback 日志。
二、操作
1、包結構展示如下
因為SpringBoot內部集成了LogBack所以我們不需要添加任何依賴,我們只需要創建一個新的空項目即可。
2、依賴引入
3、編寫控制類
package com.ly.logback.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class indexController {
// logback
private final static Logger logger = LoggerFactory.getLogger(indexController.class);
/**
* 訪問首頁
* @return
*/
@RequestMapping("/index")
public String index(){
logger.debug("記錄debug日志");
logger.info("訪問了index方法");
logger.error("記錄了error錯誤日志");
return "index";
}
}
訪問頁面如下:我們訪問地址后,控制臺就對應的輸出了info級別的測試日志內容了,上面我們說了這是logback的默認配置base.xml搞的鬼,那么我們該如何修改默認配置呢?
修改LogBack配置
LogBack讀取配置文件的步驟
(1)嘗試classpath下查找文件logback-test.xml
(2)如果文件不存在,嘗試查找logback.xml
(3)如果兩個文件都不存在,LogBack用BasicConfiguration自動對自己進行最小化配置,這樣既實現了上面我們不需要添加任何配置就可以輸出到控制臺日志信息。
4、resources目錄下新建logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
<property name="LOG_HOME" value="./logs" />
<!-- 控制臺輸出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件輸出的文件名-->
<FileNamePattern>${LOG_HOME}/runtime.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天數-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志輸出級別 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
5、測試LogBack
logback.xml配置文件配置了根輸出等級是INFO,所以如果logback.xml生效,那么控制臺以及文件內將不會存在Debug級別的日志輸出,重啟下項目,訪問之前的地址/index查看控制臺以及/logs/runtime.xxxx.log配置文件內容,如圖:可以看到Debug級別的日志沒有輸出,只有INFO以及ERROR級別日志打印并輸出到文件中。
配置的./logs作為日志的輸出根目錄,所以LogBack自動在項目根目錄下創建名叫做logs的文件夾,并且項目啟動時第一次記錄日志時會自動創建根據我們的命名方式的文件。
6、屏蔽記錄日志
如果我們在項目中需要屏蔽某個或者多個包下不輸出日志也不記錄日志到文件內,那么我們需要修改application.yml添加對應配置:
logging:
level:
com.ly.logback.controller: 'off'
注意:在application.yml配置文件內,off必須添加雙引號,否則不會生效
可以看到屏蔽了com.ly.logback.controller包下的日志打印,
為了方便測試在com.com.ly.logback包下創建一個名叫TestController的控制器并復制IndexController
再來重啟下項目,訪問127.0.0.1:8080/index地址后再查看下控制臺以及日志文件內是否存在日志信息
發現并沒有
而訪問測試的 (http://127.0.0.1:8080/test)則會打印輸出日志到控制臺和文件。