3-1 logback介绍
logback的主要模块
- logback-access:与server容器集成,提供通过Http访问日志的功能。第三方软件可以通过该模块访问到logback里面记录的日志
- logback-classic:log4j的改良版本
- logback-core:为前两个模块提供基础服务
logback的主要标签
- logger:日志记录器,存放日志对象,可以定义日志的类型和级别等
- appender:指定日志输出的目的地即媒介
- layout:用来格式化日志信息的输出
3-2 logback的配置
在main/resources目录下新建logback的配置文件logback.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- scan:是否扫描配置文件的变化,配置文件发生改变将被重新加载 scanPeriod:扫描间隔,单位:ms debug:是否实时打印logback内部的日志信息 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 定义参数常量 -->
<!-- log.level-日志级别:TRACE<DEBUG<INFO<WARN<ERROR -->
<!-- 例:logger.trace("msg")不会显示trace、debug的内容 -->
<property name="log.level" value="debug"></property>
<!-- log.maxHistory-日志文件保留时间,单位:天 -->
<property name="log.maxHistory" value="30"></property>
<!-- log.filePath-日志文件存储根路径 ${catalina.base}:tomcat根目录 -->
<property name="log.filePath" value="${catalina.base}/logs/webapps"></property>
<!-- log.pattern-日志展现格式 -->
<property name="log.pattern"
value="$%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread]%-5level %logger{50} - %msg%n"></property>
<!-- 控制台设置 -->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<!-- 转换字符串+将日志输出到相应文件 -->
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 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>
<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>
<!-- 过滤器:过滤掉不属于info级别的信息 -->
<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>
<!-- 过滤器:过滤掉不属于error级别的信息 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- name="com.doit.o2o":监控com.doit.o2o包下产生的日志,additivity:是否将root属性添加到logger中 -->
<!-- 如果logger level没有指定,将自动继承root的level-->
<logger name="com.doit.o2o" level="${log.level}" additivity="true">
<appender-ref ref="debugAppender" />
<appender-ref ref="infoAppender" />
<appender-ref ref="errorAppender" />
</logger>
<root level="info">
<appender-ref ref="consoleAppender" />
</root>
</configuration>
3-3 验证配置
创建Logger类对象,打印日志
@Controller
@RequestMapping("/superadmin")
public class AreaController {
//创建1个Logger类对象
Logger logger = LoggerFactory.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<Area>();
try{
list = areaService.getAreaList();
//rows和total为了和前端一致
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===");
return modelMap;
}
}
start tomcat
浏览器访问:http://localhost:8080/o2o/superadmin/listarea