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;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章