本文来说下logback日志框架基本知识
文章目录
- 概述
- logback简介
- SpringBoot对logback的支持
- SpringBoot的集成
- SpringBoot对logback的基础配置
- 自定义logback配置
- 本文小结
概述
Spring Boot已经将logback做为默认集成的日志框架,全面了解学习是必然了。曾经log4j是流行的日志框架,现在已被它的继任者logback替代,logback更快,更小,更灵活。当然,如果你的项目中还在用System.out.println()来输出内容,那更是得行动起来,要么“逃”吧,要么改造吧。
logback简介
先来看看logback何许人也,最直接的就是看看它的官网:https://logback.qos.ch/
官网首页直言不讳的说它将是log4j的继承者,所以,如果还没用到或如果还不会使用,赶紧行动起来吧。
logback主要由三个模块构成:logback-core,logback-classic及logback-access。
logback-core为基础核心,另外两个均依赖它。其中logback-classic实现了简单日志门面SLF4J;logback-access主要作为一个与Servlet容器交互的模块,提供与HTTP访问相关的一些功能。
通常使用时直接引入logback-classic的依赖,便可自动引入logback-core,当然为保险起见也可以显式的引入两者。
SpringBoot对logback的支持
上面已经提到SpringBoot默认集成了logback,因此无需专门引入便可进行直接使用。后面的示例我们也基于SpringBoot来进行演示和讲解,毕竟方便嘛。
在SpringBoot的web项目中logback的依赖关系如下:
我们可以看到一旦引入spring-boot-starter-web依赖,对应的不仅引入了logback框架,还同时引入了slf4j相关框架。所以,项目中直接使用即可。
SpringBoot的集成
首先创建一个SpringBoot项目,核心依赖文件便是spring-boot-starter-web。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
如此便集成完成,其实嘛,等于根本不用集成。我们在项目中创建一个Controller类,其中打印不同级别的日志信息。
package com.wideth.controller;import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@Api(tags = "logback")
@RequestMapping("/api")
public class LogbackController {private static final Logger log = LoggerFactory.getLogger(LogbackController.class);@ApiOperation(value = "logback")@GetMapping("/hello")public void hello() {log.debug("Hello world 测试debug日志");log.info("Hello world 测试info日志");log.warn("Hello world 测试warn日志");log.error("Hello world 测试error日志");}
}
上面代码中分别使用debug,info,warn,error方法输出日志。日志的所有配置,都是基于SpringBoot集成logback时的默认配置来的。
此时如果访问对应的url,便可打印出对应日志。
为什么只打印了三行?因为SpringBoot默认日志输出级别为info级别。在application.properties文件中添加如下配置便可打印出debug级别的日志。
logging:level:com.wideth: debug
其中com.wideth为项目的基础package路径。更多配置使用下节专门进行讲解。
SpringBoot对logback的基础配置
SpringBoot对logback内置了一些默认配置,这与SpringBoot集成其他框架异曲同工。默认情况下SpringBoot将日志输出到控制台,不会写到日志文件。如果输出到日志文件,则需在application.properties中设置logging.file或logging.path属性。
logging:level:com.wideth: debugfile:# 注:二者不能同时使用。否则只有logging.file生效name: my.logpath: my.logs
关于日志级别的配置,在上面已经有具体的示例了。设置格式为logging.leve.* =LEVEL,其中*为包名或logger名,LEVEL有:TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF。
其他的就是日志文件的大小(默认10MB)、格式,以及控制台和日志文件内日志的格式配置了。根据提示我们可以很轻易搞定。
但是,你可能也发现了在application.properties中支持的配置有些简单。对的,如果需要配置复杂的日志内容,则需要基于xml配置文件来进行操作。
自定义logback配置
在application.properties中配置日志,通常在小型系统或对日志没有严格要求的系统中使用。如果运用在生产环境,通常建议通过基于xml文件来对logback进行自定义配置。在SpringBoot中,默认支持四种命名的日志文件。
也就是说如果在src/main/resources目录下放置其中任一类型的配置文件,SpringBoot便会自动进行使用。
而Spring Boot官方推荐优先使用带有-spring的文件名配置(如有logback-spring.xml,则不会使用logback.xml)。
若需要对配置文件名进行修改,或者希望把放到其它目录下,可以在application中通过logging.config属性来指定,如logging.config=classpath:config/my-log-config.xml。
本文小结
本文介绍了logback日志框架基本知识和常见的一些概念