SpringBoot日志框架
项目中日志系统是必不可少的的。 目前比较流行的日志框架有log4j、logback等 。
slf4j(Simple Logging Facade for Java)则是一个日志门面框架,提供了日志系统中常用的接口,logback 和log4j 则对slf4j 进行了实现。
Logback的定制性更加灵活,同时也是spring boot的内置日志框架。
3.1 默认配置:
默认情况下Spring Boot将日志输出到控制台,不会写到日志文件。如果要编写除控制台输出之外的日志文件,则需在application.yaml中设置logging.file或logging.path属性:
logging:
file:
path: 日志文件路径
name: 文件名
level: debug
pattern:
console: 日志打印规则
path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如path=/var/log
Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,将xml放至 src/main/resource下面。
也可以使用自定义的名称,比如logback-config.xml,只需要在application.yaml文件中使用logging.config=classpath:logback-config.xml指定即可。
在讲解 logback-spring.xml之前我们先来了解三个单词:Logger, Appenders和Layouts(记录器、附加器、布局):
Logback基于三个主要类:Logger,Appender和Layout。 这三种类型的组件协同工作,使开发人员能够根据消息类型和级别记录消息,并在运行时控制这些消息的格式以及报告的位置。首先给出一个基本的xml配置如下:
logback.xml配置文件的基本结构可以描述为元素,包含零个或多个元素,后跟零个或多个元素,后跟最多一个元素(也可以没有)。下图说明了这种基本结构:
元素只接受一个必需的name属性,一个可选的level属性和一个可选的additivity属性,允许值为true或false。 level属性的值允许一个不区分大小写的字符串值TRACE,DEBUG,INFO,WARN,ERROR,ALL或OFF。元素可以包含零个或多个元素; 这样引用的每个appender都被添加到指定的logger中。logger元素级别具有继承性。
元素配置根记录器。 它支持单个属性,即level属性。 它不允许任何其他属性,因为additivity标志不适用于根记录器。 此外,由于根记录器已被命名为ROOT,因此它也不允许使用name属性。level属性的值可以是不区分大小写的字符串TRACE,DEBUG,INFO,WARN,ERROR,ALL或OFF之一元素可以包含零个或多个元素; 这样引用的每个appender都被添加到根记录器中。
appender使用元素配置,该元素采用两个必需属性name和class。 name属性指定appender的名称,而class属性指定要实例化的appender类的完全限定名称。 元素可以包含零个或一个元素,零个或多个元素以及零个或多个元素,下图说明了常见的结构:
在logback中,输出目标称为appender,addAppender方法将appender添加到给定的记录器logger。给定记录器的每个启用的日志记录请求都将转发到该记录器中的所有appender以及层次结构中较高的appender。
换句话说,appender是从记录器层次结构中附加地继承的。例如,如果将控制台appender添加到根记录器,则所有启用的日志记录请求将至少在控制台上打印。如果另外将文件追加器添加到记录器(例如L),则对L和L的子项启用的记录请求将打印在文件和控制台上。通过将记录器的additivity标志设置为false,可以覆盖此默认行为,以便不再添加appender累积。
encoder中最重要就是pattern属性,它负责控制输出日志的格式,这里给出一个我自己写的示例:
%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) --- [%15.15(%thread)] %cyan(%-40.40(%logger{40})) : %msg%n使用后的输出格式如下图所示 :
%d{yyyy-MM-dd HH:mm:ss.SSS}:日期
%-5level:日志级别
%highlight():颜色,info为蓝色,warn为浅红,error为加粗红,debug为黑色
%thread:打印日志的线程
%15.15():如果记录的线程字符长度小于15(第一个)则用空格在左侧补齐,如果字符长度大于15(第二个),则从开头开始截断多余的字符
%logger:日志输出的类名
%cyan:颜色
%msg:日志输出内容
%n:换行符
ThresholdFilter 过滤低于指定阈值的事件。 对于等于或高于阈值的事件,ThresholdFilter将在调用其decision()方法时响应NEUTRAL。 但是,将拒绝级别低于阈值的事件,例如下面的配置将拒绝所有低于INFO级别的日志,只输出INFO以及以上级别的日志:
详细的logback-spring.xml demo:
以上介绍了xml中重要的几个元素,下面将我配置的xml贴出来以供参考(实现了基于日期和大小翻滚的策略,以及经INFO和ERROR日志区分输出,还有规范日志输出格式等):
推荐阅读:
https://www.cnblogs.com/alanlin/p/16202266.html