SpringBoot集成slf4j日志配置
前言
1、slf4j概述
2、pom.xml的日志依赖
3、application.yml的日志配置
4、logback.xml配置文件定义
5、logback.xml配置文件解析
5.1 定义日志的存储路径
5.2 定义日志的输出格式
5.3 定义控制台输出
5.4 定义日志相关参数
5.5 定义日志的输出级别
6、测试日志输出
7、小结
前言
日志,作为一个应用系统的重要部分,然而并不会在项目预研或需求设计阶段就作为一个功能模块单独规划设计,但这丝毫不影响它在任何一个系统中的重要的地位。
为了保证服务的高可用,及时发现问题,迅速解决问题等诉求,所以生产环境一旦出现问题,预警系统就会通过邮件、短信甚至电话的方式实施多维轰炸模式,确保相关负责人不错过每一个可能的bug。
预警系统判断疑似bug大部分源于日志。比如某个微服务接口由于各种原因导致频繁调用出错,此时调用端会捕获这样的异常并打印ERROR级别的日志,当该错误日志达到一定次数出现的时候,就会触发报警。
其次,在以往项目开发过程中,我们往往习惯性使用System.out.println()这个常用的打印输出语句来显示断点信息或业务运行对象信息或控制台日志记录,其实大量的使用System.out.println()在一定程度上会增加资源的消耗。Java日志框架众多,常用的有java.util.logging,log4j,logback,commons-logging等等。而且SpringBoot 提供了一套日志系统,logback是最优的选择。因此本文根据实际项目中使用slf4j 的logback来输出日志,效率很高。
日志的重要性,不言而喻。
OK,接下来,本文主要总结一下项目中目前使用的SpringBoot集成slf4j日志配置。
1、slf4j概述
slf4j,即(Simple Logging Facade for Java,简单门面日志)。它是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,它只服务于各种各样的日志系统。
slf4j提供了统一的记录日志的接口,对不同日志系统的具体实现进行了抽象化,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过绑定具体的日志系统来实现。在项目中使用了slf4j记录日志,并且绑定了log4j(pom.xml中配置了相应的jar包依赖),则日志会以log4j的风格输出;后期需要改为以logback的风格输出日志,只需要将jar包log4j替换成logback即可,根本不需要修改日志文件的代码。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!--定义变量--> <springProperty scope="context" name="APP_NAME" source="spring.application.name"/> <springProperty scope="context" name="APP_PORT" source="server.port"/> <springProperty scope="context" name="LOG_FILE_PATH" source="app.logPath"/> <!-- <property name="LOCAL_TEST_FILE_PATH" value="${LOG_FILE_PATH}/${APP_NAME}/${APP_PORT}"/>--> <!-- 文件输出格式 --> <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%t] %logger{36}[%L] - %msg%n"/> <!--定义日志文件位置--> <property name="LOG_HOME" value="D:\demoworkspace\sunny_redis\log"/> <!--定义日志文件位置 获取配置文件形式--> <!-- <property name="LOG_HOME" value="${LOG_FILE_PATH}/${APP_NAME}/${APP_PORT}"/>--> <!--springProfile 配置具体环境--> <!--开发环境--> <springProfile name="dev"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${PATTERN}</pattern> </encoder> </appender> <!--日志输出级别--> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </springProfile> <!--测试环境--> <springProfile name="dev,test"> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <Prudent>ture</Prudent> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${LOG_HOME}/info.%d{yyyy-MM-dd}-%i.log</FileNamePattern> <MaxHistory>10</MaxHistory> <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <MaxFileSize>20MB</MaxFileSize> </TimeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${PATTERN}</pattern> </layout> </appender> <!--日志输出级别--> <root level="INFO"> <appender-ref ref="FILE"/> </root> </springProfile> </configuration>