1. logback主要模塊
logback-access:與service容器集成,提供通過http來訪問日誌的功能。
logback-classic:是log4j的改良版,完整的實現了slf4j-api。
logback-core:爲上述兩個模塊提供了基礎的服務。
2. logback主要標籤
logger: 作爲日誌的記錄器主要用於存放日誌對象,可以定義日誌的類型及級別。
appender: 用於指定日誌輸入的目的地,也就是輸出的媒介,可以是控制檯,也可以是文件等。
layout: 用於格式化日誌信息的輸出
3. logback配置
(1)引入logback相關jar包
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
(2)在各自項目中resources目錄下創建logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- scan:配置文件發生改變則自動加載 ;scanPeriod:自動掃描配置時間修改間隔 (60秒鐘掃描一次) debug:是否爲調試模式-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 定義參數常量 -->
<!-- 日誌級別:TRACE/DEBUG/INFO/WARN/ERROR 調用方法:logger.trace("msg") logger.debug... -->
<property name="log.level" value="debug" />
<!-- 文件保留的時間 -->
<property name="log.maxHistory" value="30" />
<!-- 日誌根目錄 -->
<property name="log.filePath" value="${catalina.base}/logs/webapps" />
<!-- 日誌展現格式 %d表示日期格式; [%thread]表示由哪個線程執行; %-5表示縮進五位;level日誌級別;%logger{50} - %msg"表示哪個類裏輸出的日誌信息 ;%n換行 -->
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />
<!-- 日誌輸出的目的地,即輸出媒介配置 :當前配置爲控制檯輸出-->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- DEBUG ,RollingFileAppender:滾動,即文件大小超出或隨日期推移自動創建新的日誌文件。-->
<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路徑 -->
<file>${log.filePath}/debug.log</file>
<!-- rollingPolicy 滾動策略,基於時間滾動 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名稱 -->
<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 文件最大保存歷史數量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!-- 日誌過濾器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- INFO -->
<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路徑 -->
<file>${log.filePath}/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名稱 -->
<fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 文件最大保存歷史數量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- ERROR -->
<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路徑 -->
<file>${log.filePath}/erorr.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名稱 -->
<fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 文件最大保存歷史數量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- additivity 爲true -->
<logger name="com.imooc.o2o" level="${log.level}" additivity="true">
<!-- 與appender進行綁定 -->
<appender-ref ref="debugAppender"/>
<appender-ref ref="infoAppender"/>
<appender-ref ref="errorAppender"/>
</logger>
<root level="info">
<appender-ref ref="consoleAppender"/>
</root>
</configuration>
4. 驗證日誌配置是否可用
(1)controller層中創建日誌
//創建日誌
Logger logger = LoggerFactory.getLogger(AreaController.class);
@Autowired
private AreaService areaService;
@RequestMapping(value = "/listarea", method = RequestMethod.GET)
@ResponseBody
private Map<String, Object> listArea() {
//日誌打印
logger.info("===start===");
long startTime = System.currentTimeMillis();
Map<String, Object> modelMap = new HashMap<String, Object>();
List<Area> list = new ArrayList<Area>();
try {
list = areaService.getAreaList();
modelMap.put("rows", list);
modelMap.put("total", list.size());
} catch (Exception e) {
e.printStackTrace();
modelMap.put("success", false);
modelMap.put("errMsg", e.toString());
}
// 可用多種日誌級別
logger.error("test error!");
long endTime = System.currentTimeMillis();
logger.debug("costTime:[{}ms]", endTime - startTime);
logger.info("===end===");
(1)運行查看日誌是否正常輸出
驗證成功!