Spring Boot异步输出Logback日志方法详解

网友投稿 488 2022-12-29


Spring Boot异步输出Logback日志方法详解

一、介绍

1.1 Logback

Logback是由log4j创始人设计的另一个开源日志组件,它分为下面下个模块:

logback-core:其它两个模块的基础模块

logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging

logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能

1.2 日志级别

包括:TRACE、DEBUG、INFO、WARN 和 ERROR。

1.2.1 TRACE

特别详细的系统运行完成信息,业务代码中,不要使用。(除非有特殊用意,否则请使用DEBUG级别替代)

1.2.2 DEBUG

可以填写所有的想知道的相关信息(但不代表可以随便写,debug信息要有意义,最好有相关参数);

生产环境需要关闭DEBUG信息

如果在生产情况下需要开启DEBUG,需要使用开关进行管理,不能一直开启。

1.2.3 INFO

系统运行信息

Service方法中对于系统/业务状态的变更;

主要逻辑中的分步骤。

外部接口部分

客户端请求参数(REST/WS);

调用第三方时的调用参数和调用结果。

说明

并不是所有的service都进行出入口打点记录,单一、简单service是没有意义的;

对于复杂的业务逻辑,需要进行日志打点,以及埋点记录,比如电商系统中的下订单逻辑,以及OrderAction操作(业务状态变更);

对于整个系统的提供出的接口(REST/WS),使用INFO记录入参;

如果所有的service为SOA架构,那么可以看成是一个外部接口提供方,那么必须记录入参;

调用其他第三方服务时,所有的出参和入参是必须要记录的(因为你很难追溯第三方模块发生的问题)。

1.2.4 WARN

不应该出现但是不影响程序、当前请求正常运行的异常情况:

有容错机制的时候出现的错误情况;

找不到配置文件,但是系统能自动创建配置文件;

即将接近临界值的时候,例如:缓存池占用达到警告线;

业务异常的记录,比如:当接口抛出业务异常时,应该记录此异常。

1.2.5 ERROR

影响到程序正常运行、当前请求正常运行的异常情况:

打开配置文件失败;

所有第三方对接的异常(包括第三方返回错误码);

所有影响功能使用的异常,包括:SQLException和除了业务异常之外的所有异常(RuntimeException和Exception)。

不应该出现的情况:

如果进行了抛出异常操作,请不要记录ERROR日志,由最终处理方进行处理:

反例(不要这么做):

try{

....

}catch(Exception ex){

String errorMessage=String.format("Error while reading information of user [%s]",userName);

logger.error(errorMessage,ex);

throw new UserServiceException(errorMessage,ex);

}

1.3 SpringBoot 中 logback

SpringBoot工程自带logback和slf4j的依赖,所以重点放在编写配置文件上,需要引入什么依赖,日志依赖冲突统统都不需要我们管了;

logback框架会默认加载classpath下命名为logback-spring或logback的配置文件。

将所有日志都存储在一个文件中文件大小也随着应用的运行越来越大并且不好排查问题,正确的做法应该是将ERROR日志和其他日志分开,并且不同级别的日志根据时间段进行记录存储。

二、logback 配置

2.1 配置文件logback-spring.xml示例

[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n

ERROR

DENY

ACCEPT

[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n

${logPath}/info.%d.log

30

ERROR

[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n

${logPath}/error.%d.log

30

0

256

0

256

项目配置文件中配置日志输出地址

logging:

path: ./logs

2.2 标签说明

标签:指定最基础的日志输出级别;

标签,添加append

标签:指定日志的收集策略

name属性指定appender命名

class属性指定输出策略,通常有两种,控制台输出和文件输出,文件输出就是将日志进行一个持久化。ConsoleAppender将日志输出到控制台。

标签:指定过滤策略

:指定过滤的类型。

标签:使用该标签下的标签指定日志输出格式。

标签:指定收集策略,比如基于时间进行收集

标签指定生成日志保存地址,实现了按天分类以及日志的目标了。

三、 源码

github 示例源码

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:抽象类可以实现接口吗(抽象类需要实现接口中的所有方法吗)
下一篇:三剑客接口测试工具(三剑客接口测试工具在哪)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~