SpringBoot 异步输出 Logback 日志

一、介绍

1.1 Logback

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

  1. logback-core:其它两个模块的基础模块
  2. logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging
  3. logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能

1.2 日志级别

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

1.2.1TRACE

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

1.2.2DEBUG

debug
DEBUG

1.2.3INFO

  • 系统运行信息
  1. Service方法中对于系统/业务状态的变更;
  2. 主要逻辑中的分步骤。
  • 外部接口部分
  1. 客户端请求参数(REST/WS);
  2. 调用第三方时的调用参数和调用结果。
  • 说明
INFO

1.2.4WARN

  • 不应该出现但是不影响程序、当前请求正常运行的异常情况:
  1. 有容错机制的时候出现的错误情况;
  2. 找不到配置文件,但是系统能自动创建配置文件;
  • 即将接近临界值的时候,例如:缓存池占用达到警告线;
  • 业务异常的记录,比如:当接口抛出业务异常时,应该记录此异常。

1.2.5ERROR

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

  1. 打开配置文件失败;
  2. 所有第三方对接的异常(包括第三方返回错误码);
  3. 所有影响功能使用的异常,包括: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

  1. SpringBoot 工程自带logback 和slf4j 的依赖,所以重点放在编写配置文件上,需要引入什么依赖,日志依赖冲突统统都不需要我们管了;
  2. logback 框架会默认加载classpath 下命名为logback-spring 或logback 的配置文件。
  3. 将所有日志都存储在一个文件中文件大小也随着应用的运行越来越大并且不好排查问题,正确的做法应该是将ERROR 日志和其他日志分开,并且不同级别的日志根据时间段进行记录存储。

二、logback 配置

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


<configuration>

<springproperty>

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

<appender>

<filter>
<level>ERROR/<level>
<onmatch>DENY/<onmatch>
<onmismatch>ACCEPT/<onmismatch>
/<filter>
<encoder>

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

<rollingpolicy>

<filenamepattern>${logPath}/info.%d.log/<filenamepattern>
<maxhistory>30/<maxhistory>
/<rollingpolicy>
/<appender>
<appender>

<filter>
<level>ERROR/<level>
/<filter>
<encoder>

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


<rollingpolicy>

<filenamepattern>${logPath}/error.%d.log/<filenamepattern>
<maxhistory>30/<maxhistory>
/<rollingpolicy>
/<appender>

<appender>

<discardingthreshold>0/<discardingthreshold>

<queuesize>256/<queuesize>

<appender-ref>
/<appender>
<appender>

<discardingthreshold>0/<discardingthreshold>

<queuesize>256/<queuesize>

<appender-ref>
/<appender>

<root>
<appender-ref>
<appender-ref>
<appender-ref>
/<root>
/<configuration>

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

logging:
path: ./logs

2.2 标签说明

  • <root> 标签:指定最基础的日志输出级别;/<root>
  • <appender-ref> 标签,添加append/<appender-ref>
  • <appender> 标签:指定日志的收集策略/<appender>
  1. name 属性指定appender 命名
  2. class 属性指定输出策略,通常有两种,控制台输出和文件输出,文件输出就是将日志进行一个持久化。ConsoleAppender 将日志输出到控制台。
  • <filter> 标签:指定过滤策略/<filter>
  • <level> :指定过滤的类型。/<level>
  • <encoder> 标签:使用该标签下的<pattern> 标签指定日志输出格式。/<pattern>/<encoder>
  • <rollingpolicy> 标签:指定收集策略,比如基于时间进行收集/<rollingpolicy>
  • 标签指定生成日志保存地址,实现了按天分类以及日志的目标了。

三、 源码

Github 示例源码


分享到:


相關文章: