SpringBoot框架內(nèi)部集成了LogBack日志肮蛹,默認使用LogBack的base.xml配置內(nèi)容來輸出日志到控制臺或文件之中崖媚。本文主要介紹如何使用Logback進行日志記錄。
1、在controller包下新增log相關(guān)類润匙,這里引用的日志包是org.slf4j包下的胧砰。
LogController 類:
package com.example.demo.controller;
import com.example.demo.helper.LogHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("log")
public class LogController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@RequestMapping("writelog")
public Object writeLog()
{
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warn message");
logger.error("This is an error message");
new LogHelper().helpMethod();
return "OK";
}
}
LogHelper 類:
package com.example.demo.helper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogHelper {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
public void helpMethod(){
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warn message");
logger.error("This is an error message");
}
}
這里一定要在pom文件中引入tomcat-embed-jasper相關(guān)包,詳細請參考:SpringBoot 篇 - 整合jsp
2、在瀏覽器中輸入http://localhost:8080/log/writelog 將會看到以下結(jié)果
控制臺輸出如下:
可以看到來自logback root logger的輸出信息奇徒。
但是可以注意到debug級別的日志沒有記錄下來雏亚,那是因為Spring Boot為Logback提供了默認的配置文件base.xml,另外Spring Boot 提供了兩個輸出端的配置文件console-appender.xml和file-appender.xml摩钙,base.xml引用了這兩個配置文件罢低。
以下是base.xml的內(nèi)容,可以看到胖笛,root logger的日志級別被重寫為Info級別网持,這就是上面例子中debug級別的日志沒有打印的原因。
<?xml version="1.0" encoding="UTF-8"?>
<included>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</included>
3匀钧、對Logback進行配置
方法一:在application.properties文件中對Logback進行配置
logging.file=log.log
logging.level.com.example.demo.controller = debug
logging.level.com.example.demo.helper = warn
配置記錄日志到log.log,com.example.demo.controller日志級別為debug,
com.example.demo.helper中日志級別為warn翎碑。看到以下結(jié)果之斯,按照配置的日志級別進行記錄日杈。
可以看到日志記錄到了log.log日志文件中。
方法二:通過額外的文件logback.xml配置Logback
在main/resources下新增 logback.xml文件佑刷,在logback.xml配置文件中莉擒,添加了控制臺輸出、文件每天輸出瘫絮、日志文件最大上限涨冀、輸出的日志都為debug級別,文件內(nèi)容:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!-- 應(yīng)用名稱 -->
<property name="APP_NAME" value="springboot" />
<!--日志文件的保存路徑,首先查找系統(tǒng)屬性-Dlog.dir,如果存在就使用其;否則麦萤,在當(dāng)前目錄下創(chuàng)建名為logs目錄做日志存放的目錄 -->
<property name="LOG_HOME" value="${log.dir:-logs}/" />
<!-- 日志輸出格式 -->
<property name="ENCODER_PATTERN"
value="%d{HH:mm:ss.SSS} %-5level [%15.15thread] %logger{30} - %msg%n" />
<contextName>${APP_NAME}</contextName>
<!-- 控制臺日志:輸出全部日志到控制臺 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>${ENCODER_PATTERN}</Pattern>
</encoder>
</appender>
<!-- 文件日志:輸出全部日志到文件 -->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/info.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${ENCODER_PATTERN}</pattern>
</encoder>
</appender>
<!-- 錯誤日志:用于將錯誤日志輸出到獨立文件 -->
<appender name="ERROR_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${ENCODER_PATTERN}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</configuration>
控制臺輸出結(jié)果如下:
因為logback.xml中配置的./logs作為日志的輸出根目錄鹿鳖,所以LogBack自動在我們的項目根目錄下創(chuàng)建名叫做logs的文件夾,并且項目啟動時第一次記錄日志時會自動創(chuàng)建根據(jù)我們的命名方式的文件壮莹。
4翅帜、屏蔽某個包下的日志輸出
項目中需要屏蔽某個或者多個包下不輸出日志也不記錄日志到文件內(nèi),可以修改application.properties文件添加對應(yīng)配置:
logging.level.com.example.demo.controller = off
重啟運行命满,控制臺輸出如下涝滴,可以看到屏蔽了com.example.demo.controller 包下的日志打印。