logback日誌的使用

catalina.homecatalina.base區別

catalina.home和catalina.base

Tomcat解惑 之 CATALINA_HOME與CATALINA_BASE

catalina.home指向公用信息的位置,就是bin和lib的父目 錄。
catalina.base指 向每個Tomcat目 錄私有信息的位置,就是conf、logs、temp、webapps和work的父目錄。

logback.xml文件的配置

直接把下面的文件命名爲logback.xml放在java/resource下(根目錄)就可以被自動讀取

<?xml version="1.0" encoding="UTF-8"?>
<!--scan爲true(默認每一分鐘掃描一下配置文件,如果發生更改就重新加載配置文件)  
	scanPeriod設置掃描配置文件的時間間隔(如果沒有指定單位默認爲毫秒)
    debug 如果設置爲true,在控制檯中打印logback內部運行日誌(內部狀態信息,如果配置文件有錯誤也會輸出),由於logback已經很穩定了,我們一般設置爲false,以免干擾我們查看有用的日誌信息  -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
	
	<!--定義參數常量(全局變量)-->
	<!--設置Logger的等級 (TRACE<DEBUG<INFO<WARN<ERROR),假設配置爲INFO,那麼debug將不會被輸出,我們一般會把debug,info,error的信息分別輸出到文件中-->
	<property name="log.level" value="debug" />
	<!--歸檔日誌文件保存的最大時間(單位跟按什麼輪轉有關,比如按天輪轉那麼單位就爲天) -->
	<property name="log.maxHistory" value="30" />
	<!--日誌存儲的根路徑 ${catalina.base}指向每個Tomcat目錄私有信息的位置,
	         就是conf、logs、temp、webapps和work的父目錄-->
	<property name="log.filePath" value="${catalina.base}/logs/webapps" />
	<!--日誌展示的格式-->
	<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
	
    <!--appender是爲了配置日誌信息輸出到哪個地方-->
	<!--控制檯設置,輸出到控制檯中-->
	<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
		<!--encoder作用是既把日誌信息轉換爲字符串,也輸出到指定的位置 -->
		<encoder>
            <!--pattern爲配置輸出的格式-->
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>
    
	<!-- DEBUG -->
    <!-- 把DEBUG信息輸出到指定文件中-->
	<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${log.filePath}/debug.log</file>
        <!-- 防止日誌文件過大,按一定的策略(按時間週期,或者文件達到一定大小)生成新的日誌文件-->
		<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作用是既把日誌信息轉換爲字符串,也輸出到指定的位置(文件) -->
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<!--基於級別來過濾日誌事件
			只輸出DEBUG級別的日誌事件,過濾掉其他日誌事件-->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>DEBUG</level>
			<onMatch>ACCEPT</onMatch><!-- 如果是debug級別的信息就記錄-->
			<onMismatch>DENY</onMismatch><!--如果不是debug級別的信息不記錄-->
		</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}/error.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>
	
	<!-- name表示爲哪一個logger指定層級和輸出的方式 
		 additivity表示疊加祖先的輸出方式(默認爲true,會疊加),所以com.lxc.o2o以及其子類都會輸出在控制檯中,因爲這個logger繼承了root中的appender
		level表示級別大於${log.level}的信息纔會輸出,輸出方式爲配置的appender-->
	<logger name="com.lxc.o2o" level="${log.level}" additivity="true">
		<appender-ref ref="debugAppender"></appender-ref>
		<appender-ref ref="infoAppender"></appender-ref>
		<appender-ref ref="errorAppender"></appender-ref>
        <!--這裏還會繼承root logger的appender,打印信息在控制檯中-->
	</logger>
	
	<!-- 一切logger都會繼承自root,root默認的層級level爲debug -->
	<root level="info">
      <!--在控制檯中輸出所在層級對應level(以及大於level)的日誌信息,因爲這裏並沒有設置LevelFilter-->
		<appender-ref ref="consoleAppender"></appender-ref>
	</root>
</configuration>
  • 層級Level

    對於一個給定的名爲 Llogger,它的有效層級爲從自身一直回溯到 root logger,直到找到第一個不爲空的層級作爲自己的層級。爲了確保所有的 logger 都有一個層級,root logger 會有一個默認層級 — DEBUG

  • appender疊加

    自動疊加父類的appender,除非這個logger的屬性additivity設置爲false。所以上面配置的層級com.lxc.o2o也會繼承root的appender,在控制檯中打印信息

日誌的使用

@Controller
@RequestMapping("/superadmin")
public class AreaController {
    
	Logge
        ggerFactory.getLogger(AreaController.class);
    
    
	@Autowired
	private AreaService areaService;

	@RequestMapping(value = "/listarea", method = RequestMethod.GET)
	@ResponseBody
	public Map<String, Object> listArea() {
		logger.info("=======start========");
		long startTime = System.currentTimeMillis();
		Map<String, Object> modelMap = new HashMap<String, Object>();
		List<Area> list = new ArrayList<>();
		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("error test");
		long endTime = System.currentTimeMillis();
		logger.debug("costTime:[{}ms]", endTime - startTime);//輸出costTime:[12ms]
		logger.info("========end=========");
		return modelMap;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章