一、logback的主要模板
二、logback主要标签
三、logback的配置
scan=“true”:配置文件发生改变自动刷新
scanPeriod=“60 seconds” :刷新感知时间
日志级别level的级别(log.leavel):TRACE<DEBUG<INFO<WARN<ERROR
eg:logger.trace(“msg”) logger.debug…
log.maxHistory:保留多长时间
log.filePath:日志存储的根路径
log.pattern:日志展现的格式
日志输出类型:consoleAppender、debugAppender、infoAppender、errorAppender
logger标签:存放日志对象,并且告诉logback要关注那个pack下的信息,name是pack的名称,level是记录的级别
root标签:根logger 如果未定义上logger则以level这个为准
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- scan="true"配置文件改变,自定加载 ; scanPeriod监测配置文件是否有修改,扫描间隔,60s扫描一次 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 定义参数常量 -->
<!-- 日志级别level的级别 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"/>
<!-- 日志格式 时间/线程/日志级别/日志/换行 -->
<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 ch.qos.logback.core.rolling.RollingFileAppender 滚动生成新的文件 -->
<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>
<pattern>${log.pattern}</pattern>
</encoder>
<!-- 过滤器,仅接受debug的信息 -->
<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}/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>
<!-- 存放日志对象,并且告诉logback要关注那个pack下的信息 -->
<logger name="com.imooc.o2o" level="${log.level}" additivity="true">
<appender-ref ref="debugAppender" />
<appender-ref ref="infoAppender" />
<appender-ref ref="errorAppender" />
</logger>
<!-- 根logger 如果未定义上logger则以这个为准-->
<root level="info">
<appender-ref ref="consoleAppender" />
</root>
</configuration>
三A、logback验证是否配置成功
一般会在action或者server中配置日志信息
package com.imooc.o2o.web.superadmin;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.imooc.o2o.entity.Area;
import com.imooc.o2o.service.AreaService;
@Controller
@RequestMapping("/superadmin")
public class AreaController {
// 1、引入logback
Logger logger = LoggerFactory.getLogger(AreaController.class);
@Autowired
private AreaService areaService;
@RequestMapping(value = "/listarea", method = RequestMethod.GET)
@ResponseBody
private Map<String, Object> listAreas() {
// 2、打印logger.info级别的信息
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());
}
// 3、打印logger.error(模拟)级别的信息
logger.error("test error!");
long endTime = System.currentTimeMillis();
// 3A、打印logger.debug级别的信息
logger.debug("costTime:[{}ms]", endTime-startTime);
logger.info("===end===");
return modelMap;
}
}
日志输出文件在CATALINA_BASE下
控制台输出的日志信息
CATALINA_BASE位置保存的日志文件
前一天的文件会打包成gz