使用slf4j和logback記錄日誌
阿新 • • 發佈:2018-12-26
前言
Logback是由log4j創始人設計的一個開源日誌元件, 效能比log4j的效能還好, 將會逐步地替代掉log4j,Logback需要和slf4j一起使用,slf4j只提供介面,沒有提供具體的實現,Logback很好的實現slf4j中的介面,現在來看看如何使用logback記錄日誌
匯入依賴
logback依賴如下幾個Jar包
slf4j-api.jar,logback-core.jar,logback-classic.jar,logback-access.jar
在pom.xml引入依賴包
<dependency>
<groupId>org.slf4j</groupId >
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.1.7</version>
</dependency>
<dependency >
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId >
<version>1.1.7</version>
</dependency>
配置日誌檔案
在src/main/resources目錄下新增logback-dp.xml日誌檔案,內容如下
<?xml version="1.0" ?>
<configuration debug="false">
<!--控制檯日誌 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
<!--日誌輸出格式-->
%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n
</pattern>
</encoder>
</appender>
<!-- INFO級別日誌,記錄INFO級別及比INFO更高級別的日誌-->
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
<!--日誌引檔案路徑-->
C:\workspace\logs\%d{yyyy-MM-dd}\dp.log
</fileNamePattern>
<!-- 日誌儲存15天,超過15天自動刪除 -->
<maxHistory>15</maxHistory>
</rollingPolicy>
<encoder>
<pattern>
<!--日誌輸出格式-->
%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n
</pattern>
</encoder>
</appender>
<!-- ERROR級別日誌,只記錄Error級別日誌 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 過濾器,只記錄ERROR級別的日誌,如果日誌級別等於配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日誌 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
<!--日誌檔案路徑-->
C:\workspace\logs\%d{yyyy-MM-dd}\dp.error.log
</fileNamePattern>
<!-- 日誌儲存15天,超過15天自動刪除 -->
<maxHistory>15</maxHistory>
</rollingPolicy>
<encoder>
<pattern>
<!--日誌輸出格式-->
%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n
</pattern>
</encoder>
</appender>
<root>
<!-- 日誌級別 -->
<level value="INFO"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="INFO"/>
<appender-ref ref="ERROR"/>
</root>
</configuration>
配置日誌監聽器
在web.xml檔案中配置日誌監聽器
<context-param>
<param-name>logbackConfigLocation</param-name>
<param-value>classpath:logback-dp.xml</param-value>
</context-param>
<listener>
<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
</listener>
驗證
//匯入的包都是slf4j的包
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Controller
@RequestMapping("/taskwait")
public class TaskController{
private static final Logger logger = LoggerFactory.getLogger(TaskController.class);
@RequestMapping(value = { "/queryActivity.rf" }, method = RequestMethod.POST)
@ResponseBody
public void queryActivity(@RequestBody OTCActivityConditionVO conditionVO) {
logger.trace("logback的--trace日誌--輸出了");
logger.debug("logback的--debug日誌--輸出了");
logger.info("logback的--info日誌--輸出了");
logger.warn("logback的--warn日誌--輸出了");
logger.error("logback的--error日誌--輸出了");
}
}
指定root中的級別為info,只會輸出info和比info級別更高的日誌
同時在C:\workspace\logs\目錄下生成了按日期命名的目錄及檔案
dp.log檔案,記錄了info,warn,error級別的日誌,因為沒有配置日誌過濾規則,凡是info級別及比info更高級別的日誌,都會記錄到dp.log檔案中
而dp.error.log檔案中,只記錄了error級別的日誌,因為配置日誌過濾規則,只匹配error級別的日誌