因为日志实现,可能会有一些代码的优化和改动,避免影响用户在项目中的使用,使用日志门面这些统一的接口,假设在实现层代码做了更改,用户在项目中使用日志而调用的接口等等都是不会受影响的

常见的日志框架有哪些?

在实际使用中,是选择一个抽象层的日志门面搭配一个底层日志实现来使用的。

SpringBoot中默认选择的搭配是:slf4j+logback

下面分别了解一下以上提到的各种门面和实现。

**JCL:**最后一次版本更新停在了2014年,后来没有继续维护更新,一般不考虑选用

slf4j:这里提一下日志实现里面的log4j和logback,这两个实现和门面slf4j都是同一个人写的,他先写了log4j后,觉得性能可以再做优化,又写了logback,为了有更加适配的门面,自己又为log4j和logback量身打造了门面slf4j。所以这三者里面最优的搭配当然是slf4j+logback

**JUL:**是java.util.logging包下提供的日志实现。实现简陋,很多地方受到开发者的吐槽,所以 首先排除

**jboss-loggin:**自诞生之初,就不是为了服务大众,不受到什么青睐。

**log4j2:**log4j问世之后,apache公司发现了日志市场,自家也开发了一款叫log4j2的产品。

下面老顾就介绍如何配置和使用  SLF4j + logback

日志的使用

先上一段测试代码[图片上传失败…(image-27a684-1579158948625)]

在这里 ,我们需要在每个类中创建一个 Logger对象,并且使用当前类的类名来创建,那么 **这个类名存在的意义在哪里?**我们可以先运行 第一个测试,看下结果[图片上传失败…(image-8dab16-1579158948625)]

是不是少了个debug日志,下面会介绍,不急

由上图可知,我们的**类名在日志中是为了方便我们找到异常是在哪个类中,进行锁定。因此,使用类名创建的logger的作用就是在这里,但是如果我们需要在每个类中都这样的创建一个logger对象,不方便,因此可以通过一个注解来帮我们实现那就是@Slf4j **,该注解就可以帮我们自动创建一个log对象。

@Slf4j注解

使用 @Slf4j注解需要两点

1.安装lombok插件,可上网查阅

2.添加 lombok的依赖

org.projectlombok lombok provided

修改代码
[图片上传失败…(image-8e9cdc-1579158948625)]

上面的日志输出方式,是默认方式;怎么设置日志输出,我们来看看怎么配置?

日志的配置

日志可以通过两种方法配置,一种是application.yml配置,一种是lobback-spring.xml配置。

application.yml配置

这种配置方法 配置项较少,一般有以下属性配置

1. 配置输出格式 为  时间  -  消息  换行

logging:
pattern:
console: “%d - %msg%n”

[图片上传失败…(image-68c17c-1579158948625)]

2. 配置日志输出位置

logging:
path: /Users/gujiachun/Downloads

运行后,我们可以看到Downloads下生成了一个文件spring.log这文件是spring生成
[图片上传失败…(image-aad93a-1579158948625)]

3. 配置日志输出文件 ,这样可以指定日志输出到哪个文件

logging:
file: /Users/gujiachun/Downloads/test.log

我们可以看到在Downloads生成了test文件

这里注意:我们可以配置日志保存位置,以及具体输出的文件,如果同时配置的话,会使用我们指定的file为主

4. 配置日志 输出级别

日志一般主要看重的有5个级别,优先级如 DEBUG<INFO<WARN<ERROR<FATAL等,而springboot默认配置是INFO级别,所以我们测试代码中写了三行,在结果中我们只看到了info 和 error,因为debug优先级比info低,所以我们看不到。

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

开源分享完整内容戳这里

么我们配置一下格式 logging.level.包名或类名: 级别 即可, 举例如下

logging:
pattern:
console: “%d - %msg%n”
file: /Users/gujiachun/Downloads/test.log
level:
#这里可以是包名也可以是类名
com.rainbow.goods.test: debug

运行后,我们可以看到 原来只能看到 info 和 error 的,现在的debug也可以看到

lobback-spring.xml 配置

一、我们先把application.yml的关于日志的注释掉,新建一个文件logback-spring.xml,为什么要取这个名字呢,Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置**(如使用logback-spring.xml,而不是logback.xml)**,如果我们想自定义名字,可以在 application.yml中通过logging.config=classpath:/xxx.xml等方式配置。

二、注意几个 xml节点的含义

1、根节点包含的属性

scan:当此属性设置为 true 时,配置文件如果发生改变,将会被重新加载,默认true 。
    scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当 scan 为 true 时,此属性生效。默认的时间间隔为1分钟。
    debug:当此属性设置为 true 时,将打印出 logback 内部日志信息,实时查看 logback 运行状态。默认值为 false

2、子节点

** root节点是必选节点**,用来指定最基础的日志输出级别,只有一个level属性。
   ** level:用来设置打印级别**,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG。可以包含零个或多个元素,标识这个appender将会添加到这个loger。

3、子节点 设置上下文名称

每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过 %contextName 来打印日志上下文名称,一般来说我们不用这个属性,可有可无。

4、子节点 设置变量

用来定义变量值的标签, 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。

5、子节点

appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。控制台输出 ConsoleAppender

6、子节点五

用来设置某一个包或者具体的某一个类的日志打印级别、以及指定 。 仅有一个 name 属性,一个可选的 level 和一个可选的 addtivity 属性。
    name :用来指定受此loger约束的某一个包或者具体的某一个类。
    level :用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。
    addtivity :是否向上级loger传递打印信息。默认是true。

简要说明
, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。

addtivity :是否向上级loger传递打印信息。默认是true。

简要说明

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐