Logback日誌配置【詳解】

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)運行查看日誌是否正常輸出

在這裏插入圖片描述
在這裏插入圖片描述
驗證成功!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章