今天博主将为大家分享SpringBoot+logback优雅地配置日志!不喜勿喷,如有异议欢迎讨论!
SpringBoot中如何通过sl4j日志组件优雅地记录日志。其实,我们入门 JAVA 的第一行代码就是一行日志,那你现在还在使用System.out.println(“Hello,baby!”)记录日志吗?
我最开始接触的日志组件是Log4j
Log4j 作为Apache的一个开放源代码的项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件等我们期望它输出到的地方;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
我们可以通过一个配置文件来灵活地进行上面的配置,而不需要修改应用的代码。Log4j作为当时作为最先比较流行的日志框架,给我们在应用开发和维护带来了很大的便捷。
但是,如今还是慢慢的走下“神坛”呢,逐渐被Logback替代,原来Logback是升级版!
Logback主要有下面的特性:
由三个模块组成
logback-core是其它模块的基础设施,其它模块基于它构建,显然,logback-core提供了一些关键的通用机制。logback-classic的地位和作用等同于 Log4J,它也被认为是 Log4J的一个改进版,并且它实现了简单日志门面 SLF4J;而 logback-access主要作为一个与 Servlet容器交互的模块,比如说tomcat或者 jetty,提供一些与 HTTP访问相关的功能。
那Sl4J又是什么?
slf4j为各种日志框架提供了一个统一的界面,使用户可以用统一的接口记录日志,动态地决定要使用的实现框架,比如Logback,Log4j,common-logging等框架都实现了这些接口。
路人皆知,Springboot默认使用的日志框架是Logback。顺势而为,在项目中,我们使用Logback,其实只需增加一个配置文件(自定义你的配置)即可。
配置文件精简结构如下所示
魔力小佳佳
//xxxx
//xxxx
//xxxx
这个文件在springboot中默认叫做logback-spring.xml,我们只要新建一个同名文件放在resources下面, 配置即可生效。
contextName
每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用contextName标签设置成其他名字,用于区分不同应用程序的记录
property
用来定义变量值的标签,property标签有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过property定义的值会被插入到logger上下文中。定义变量后,可以使“${name}”来使用变量。如上面的xml所示。
logger
用来设置某一个包或者具体的某一个类的日志打印级别以及指定appender。
root
根logger,也是一种logger,且只有一个level属性
appender
负责写日志的组件
appender的种类
filter
filter其实是appender里面的子元素。它作为过滤器存在,执行一个过滤器会有返回DENY,NEUTRAL,ACCEPT三个枚举值中的一个。
DENY:日志将立即被抛弃不再经过其他过滤器
NEUTRAL:有序列表里的下个过滤器过接着处理日志
ACCEPT:日志会被立即处理,不再经过剩余过滤器
ThresholdFilter
临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。
INFO
LevelFilter
级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath(用于配置符合过滤条件的操作) 和 onMismatch(用于配置不符合过滤条件的操作)接收或拒绝日志。
INFO
ACCEPT
DENY
application.yml
有关日志的简单配置,我们可以直接在application.yml中进行简单的配置,比如指明日志的打印级别和日志的输出位置
logging:
level:
root: info
path: ./logs
也可以根据分环境配置指明使用的配置文件,缺省为logback-spring.xml
logging:
level:
root: info
path: ./logs
config: classpath:/logback-dev.xml
logback-spring.xml
在resources目录下新建logback-spring.xml文件,举例一个简单的需求,如果在项目中我们如果需要指定日志的输出格式以及根据日志级别输出到不同的文件,可以配置如下:
xiaoming
%yellow(%d{yyyy-MM-dd HH:mm:ss}) %red([%thread]) %highlight(%-5level) %cyan(%logger{50}) - %magenta(%msg) %n
UTF-8
ERROR
DENY
ACCEPT
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
UTF-8
${logging.path}/xiaoming.info.%d{yyyy-MM-dd}.log
90
1GB
ERROR
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
${logging.path}/xiaoming.error.%d{yyyy-MM-dd}.log
90
再比如如果粒度再细一些,根据不同的模块,输出到不同的文件,可以如下配置
INFO
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
${logging.path}/mkc.class.%d{yyyy-MM-dd}.log
90
正常情况下xiaojia是指的
private Logger xiaojia = LoggerFactory.getLogger("xiaojia");
如果我们使用的是lomok插件,则xiaojia指的是topic
@Slf4j(topic = "xiaojia")
public class XiaoJiaTest {
}
如果大家看完这个不会配置 logback ,大家可以访问:https://juejin.im/post/5b51f85c5188251af91a7525
到这里SpringBoot+logback优雅地配置日志!分享完毕,各位小伙伴快去试试吧!
更多参考精彩博文请看这里:《陈永佳的博客》
喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!