一 什么是日志框架
1.是一套能实现日志输出的工具包
2.能够描述系统运行状态的所有时间和内容都可以算作日志
二 日志框架的能力
1.定制输出能力
2.定制输出格式
3.携带上下文信息
4.运行时选择性输出
5.灵活的配置
6.优异的性能
这些特性都是System.out所不具备的
三 常见的日志框架
日志框架分类:日志门面和日志实现
日志门面:JCL,SLF4J,jboss-loggins
日志实现:Log4j,Log4j2,Logback
这么多框架我们使用哪一套呢,其实也简单,Log4j,Log4j2和Logback是同一个作者,作者认为Log4j太烂不想修改,所以直接重写了一个Logback。而Log4j2反而因为设计太超前,以至于很多性能我们平时都用不到,所以也不建议使用。SLF4J的作者也是Logback的作者,而且很多框架都使用了SLF4J + Logback的组合,因此它就是目前的最佳日志框架组合了
四 SLF4J和Logback的使用
下面的测试代码都是使用idea编写的
1.基本用法
//基于springboot的单元测试 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest public class LoggerTest { //获取日志实例 private Logger logger = LoggerFactory.getLogger(LoggerTest.class); @Test public void test1() { //输出日志 logger.debug("debug..."); logger.info("info..."); logger.error("error..."); } }
该用法有一个很明显的缺陷就是每个需要日志输出的类都要写一次
private Logger logger = LoggerFactory.getLogger(LoggerTest.class);
很麻烦,下面使用一种注解的方式来改进代码
2.注解用法
首先要添加lombok依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
然后在类上添加@Slf4j注解(如果你idea版本过低会导致log变量找不到,需要安装lombok插件)
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest //添加该注解即可 @Slf4j public class LoggerTest { @Test public void test2() { //日志对象名变为了log log.debug("debug..."); log.info("info..."); log.error("error..."); } }
3.日志中输出变量
@Slf4j public class LoggerTest { @Test public void test3() { //一般写法 String name = "logback"; String password = "123"; log.info("一般写法 name:" + name + ", password:" + password); //占位符写法,用{}占位符代替变量 log.info("占位符写法 name:{}, password:{}", name, password); } }
4.logback的配置
logback的配置可以分为属性文件配置和xml文件配置,前者配置简单,功能也简单,后者反之
属性文件application.properties中简单配置
#日志输出格式配置
logging.pattern.console=%d - %msg%n
#配置日志路径
logging.path=/var/log/tomcat/
#配置日志路径下的日志文件名
logging.pattern.file=/var/log/tomcat/sell/
#配置日志级别
logging.level.root=debug
#配置类的日志级别
logging.level.top.pancras.SellApplication=error
基于xml的更多配置参考官网和其他博客……
https://logback.qos.ch/manual/configuration.html
https://www.cnblogs.com/warking/p/5710303.html