SpringBoot整合Slf4j+logback⽇志框架
⼀、Slf4j简单介绍与优势
1、介绍
Slf4j的全称是Simple Loging Facade For Java(Java简单⽇志门⾯),它仅仅是⼀个为Java程序提供⽇志输出的统⼀接⼝,并不是⼀个具体的⽇志实现⽅案,就⽐如JDBC⼀样,只是⼀种规则⽽已。所以单独的Slf4j是不能⼯作的,必须搭配其他具体的⽇志实现⽅案,⽐如apache的org.apache.log4j.Logger,jdk⾃带的java.util.logging.Logger等。
2、优势
解耦客户端
Slf4j只是⼀种接⼝,它本⾝并不关⼼你底层使⽤的是什么⽇志实现⽅案,所以它⽀持各种⽇志实现⽅案。简单的说,只要我们在类库中使⽤Slf4j打⽇志,那么底层使⽤什么⽇志实现⽅案是使⽤者决定的,怎么决定?依靠配置⽂件和jar库。
提⾼效率
Slf4j打印⽇志使⽤了{}占位符,这样就不会有字符串拼接操作,减少了⽆⽤ring对象的数量,节省了内存,也提⾼了时间效率,同时编码更加⽅便。
3、log level
Slf4j有四个级别的log level可供选择,级别从上到下由低到⾼,优先级⾼的将被打印出来。
Debug
简单来说,对程序调试有利的信息都可以debug输出
info
对⽤户有⽤的信息
warn
可能会导致错误的信息
error
顾名思义,发⽣错误的地⽅
⼆、SpringBoot整合Slf4j+logback
logback和log4j以及log4j2三者,推荐使⽤logback,因为logback的效率显著⾼于log4j,⽽且logback也是Springboot推荐并且默认使⽤的⽇志系统。
1、配置依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
2、配置logback
在 src\main\resources 路径下创建l配置⽂件。
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义⽇志⽂件的存储地址勿在 LogBack 的配置中使⽤相对路径-->springboot切换log4j2
<property name="LOG_HOME" value="/home"/>
<!--控制台⽇志,控制台输出 -->
<appender name="STDOUT" class="ch.ConsoleAppender">
<encoder class="ch.qos.der.PatternLayoutEncoder">
<!--格式化输出:%d表⽰⽇期,%thread表⽰线程名,%-5level:级别从左显⽰5个字符宽度,%msg:⽇志消息,%n是换⾏符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!--⽂件⽇志,按照每天⽣成⽇志⽂件 -->
<appender name="FILE" class="ch.olling.RollingFileAppender">
<rollingPolicy class="ch.olling.TimeBasedRollingPolicy">
<!--⽇志⽂件输出的⽂件名-->
<FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--⽇志⽂件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.der.PatternLayoutEncoder">
<!--格式化输出:%d表⽰⽇期,%thread表⽰线程名,%-5level:级别从左显⽰5个字符宽度%msg:⽇志消息,%n是换⾏符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--⽇志⽂件最⼤的⼤⼩-->
<triggeringPolicy class="ch.olling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
<logger name="pe.descriptor.sql.BasicBinder" level="TRACE"/>
<logger name="pe.descriptor.sql.BasicExtractor" level="DEBUG"/>
<logger name="org.hibernate.SQL" level="DEBUG"/>
<logger name="ine.QueryParameters" level="DEBUG"/>
<logger name="ine.query.HQLQueryPlan" level="DEBUG"/>
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<!-- ⽇志输出级别 -->
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
3、配置⽂件⽇志
系统⽇志全部写在⼀个⽂件会导致⽂件越来越⼤,这时候可以⽤⽂件⽇志来切分控制台⽇志,在l中添加:
<appender name="dailyRollingFileAppender" class="ch.olling.RollingFileAppender">
<File>/usr/local/log/app.log</File>
<rollingPolicy class="ch.olling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<FileNamePattern>logback.%d{yyyy-MM-dd}.log</FileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern>
</encoder>
</appender>
注:
logback.%d{yyyy-MM-dd}.log定义了⽇志的切分⽅式——把每⼀天的⽇志归档到⼀个⽂件中,30表⽰只保留最近30天的⽇志,以防⽌⽇志填满整个磁盘空间。同理,可以使⽤%d{yyyy-MM-dd HH:mm:ss SSS}来定义精确到分的⽇志切分⽅式。
三、Springboot应⽤使⽤Slf4j+logback
⽰例:
@RestController
@RequestMapping("/Test")
public class HelloWorld {
@Autowired
private HelloService helloService;
private final static Logger logger = Logger(HelloWorld.class);
@GetMapping("/hello")
public String sayHello(){
logger.info("hello Sfl4j + ");
return helloService.sayHello();
}
}
运⾏效果:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论