SpringBoot:logback日志配置
slf4j介绍
引用百度百科里的一段话:
SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
这段的大概意思是:你只需要按统一的方式写记录日志的代码,而无需关心日志是通过哪个日志系统,以什么风格输出的。因为它们取决于部署项目时绑定的日志系统。例如,在项目中使用了 slf4j 记录日志,并且绑定了 log4j
(即导入相应的依赖),则日志会以 log4j
的风格输出;后期需要改为以 logback
的风格输出日志,只需要将 log4j
替换成 logback
即可,不用修改项目中的代码。这对于第三方组件的引入的不同日志系统来说几乎零学习成本,况且它的优点不仅仅这一个而已,还有简洁的占位符的使用和日志级别的判断。
正因为 slf4j 有如此多的优点,阿里巴巴已经将 slf4j 作为他们的日志框架了。在《阿里巴巴Java开发手册(正式版)》中,日志规约一项第一条就强制要求使用 slf4j:
1.【强制】应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。
“强制”两个字体现出了 slf4j
的优势,所以建议在实际项目中,使用 slf4j
作为自己的日志框架。使用slf4j
记录日志非常简单,直接使用 LoggerFactory
创建即可。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Test {
private static final Logger logger = LoggerFactory.getLogger(Test.class);
// ……
}
application.properties中的配置
logging.config=classpath:logback-spring.xml
logging.level.com.example.demo.controller=info
logging.level.com.example.demo.dao=trace
logging.config
是用来指定项目启动的时候,读取哪个配置文件,这里指定的是日志配置文件是根路径下的 logback-spring.xml
文件,关于日志的相关配置信息,都放在 logback-spring.xml
文件中了。logging.level
是用来指定具体的 mapper 中日志的输出级别,上面的配置表示com.example.demo.dao
包下的所有 mapper
日志输出级别为 trace
,会将操作数据库的 sql
打印出来,开发时设置成 trace
方便定位问题,在生产环境上,将这个日志级别再设置成 error
级别即可
常用的日志级别按照从高到低依次为:ERROR、WARN、INFO、DEBUG。
logback-spring.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 定义日志存储的路径,不要配置相对路径 -->
<property name="FILE_PATH" value="./logs/demo.%d{yyyy-MM-dd}.%i.log" />
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="LOG_PATTERN_COLOR" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
<property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<!-- 控制台输出日志 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 按照上面配置的LOG_PATTERN来打印日志 -->
<pattern>${LOG_PATTERN_COLOR}</pattern>
</encoder>
</appender>
<!--每天生成一个日志文件,保存15天的日志文件。rollingFile是用来切分文件的 -->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${FILE_PATH}</fileNamePattern>
<!-- keep 15 days' worth of history -->
<maxHistory>15</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 日志文件的最大大小 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- project default level -->
<!-- <logger name="com.example.demo" level="info" />-->
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
<!--生产环境:输出到文件-->
<!-- <springProfile name="pro">-->
<!-- <root level="info">-->
<!-- <appender-ref ref="FILE" />-->
<!-- </root>-->
<!-- </springProfile>-->
</configuration>
使用slf4j打印日志
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
private final static Logger logger = LoggerFactory.getLogger(TestController.class);
@GetMapping("/hello")
public String test(){
logger.debug("=====测试日志debug级别打印====");
logger.info("======测试日志info级别打印=====");
logger.error("=====测试日志error级别打印====");
logger.warn("======测试日志warn级别打印=====");
return "success";
}
}
引用
上一篇: 项目中实现日志traceId
下一篇: 日志中主动添加 TraceId
推荐阅读
-
springboot配置内存数据库H2教程详解
-
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
-
nginx php-fpm中启用慢日志配置(用于检测执行较慢的PHP脚本)
-
nginx关闭favicon.ico、robots.txt日志记录配置
-
SpringBoot配置发送Email的示例代码
-
springboot配置tomcat配置乱码(配置乱码原因和对应解决法)
-
Spring Boot配置AOP打印日志的全过程
-
Spring Boot异步输出Logback日志方法详解
-
springboot介绍项目(springboot自动配置原理)
-
springboot介绍项目(springboot自动配置原理)