一、Logback简介
Logback是由log4j创始人设计的又一个开源日志组件。
logback当前分成三个模块:
- logback-core
- logback-classic
- logback-access
logback-core是其它两个模块的基础模块。
logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。
logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。
关于Logback的优点以及其他的详细介绍可以在官网查看~Logback官方网站
二、Logback的配置介绍
- 主要标签
- logger:主要用于存放日志对象,也可以定义日志类型、级别。
- appender:主要用于指定日志输出的目的地,目的地可以是控制台、文件等。
- layout:主要用于格式化日志信息的输出。
- 日志级别
Logger 可以被分配级别。级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定义于ch.qos.logback.classic.Level类。如果 logger没有被分配级别,那么它将从有被分配级别的最近的祖先那里继承级别。root logger默认级别是DEBUG。
级别排序为: TRACE < DEBUG < INFO < WARN < ERROR
三、项目中需要的Logback配置文件(logback.xml)
在项目中我们选择性的只输出DEBUG,INFO,ERROR级别的log信息。
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="60seconds" debug="false">
<!-- 定义参数常量 -->
<!-- logger级别:TRACE/DEBUG/INFO/WARN/ERROR -->
<property name="log.level" value="debug" />
<property name="log.maxHistory" value="30" />
<property name="log.filePath" value="${catalina.base}/log/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 -->
<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>
<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>
<logger name="com.yaya.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>
四、logger的简单使用
-
在pom.xml中添加依赖
<!-- 日志 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
自动下载后,在项目中发现会默认引入logback相关的jar包~
-
创建配置文件logback.xml
-
引入slf4j接口的logger类和logger工厂类
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
-
声明logger
private static final Logger logger = LoggerFactory.getLogger(×××.class);
-
代码实例
@Controller
@RequestMapping("/superadmin")
public class AreaController {
private static final 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<>();
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("test error!");
long endTime = System.currentTimeMillis();
logger.debug("costTime:[{}ms]", endTime-startTime);
logger.info("===end===");
return modelMap;
}
启动tomcat,访问http://localhost:8080/o2o/superadmin/listarea
结果如下:
五、查看日志
由于我们在配置文件中设置了日志存放的路径:
我发现 CATALINA_BASE 这个路径是在当前用户目录的IDEA隐藏目录下的system/tomcat/项目名目录下
切换目录到log/webapps目录下,我们看到日志已经在咯~
分别查看下内容:
- debug.log
- error.log
- info.log