一. 简要介绍
- 什么是SLF4J?
官网介绍:
Simple Logging Facade for Java (SLF4J) 充当简单的 各种日志记录框架的 Facade 或抽象 (e.g. java.util.logging、logback、log4j)允许最终用户在部署时插入所需的日志记录框架。
类似java中的接口,如果只集成SLF4J,日志只能输出在控制台,并没有输出到文件的能力,要实现真正的日志能力,需要引入其实现层:比如log4j,log4j2,logback等
- 什么是LogBack?
logback是log4j的创始人重新设计研发的升级版“log4j”,遵循log4j相同的设计,但重写改进了底层实现
logback分为三大块:
- logback-core:模块为其他两个模块的基础。
- logback-classic:模块可以被看做是log4j的改进版本。此外,logback-classic 本身实现了 SLF4J API,因此可以在 logback 和其他日志框架(如 log4j 或 java.util.logging(JUL))之间来回切换。
- logback-access:模块与 Servlet 容器(如 Tomcat 和 Jetty)集成,以提供 HTTP 访问日志功能。
二. 依赖引入
如果是非springboot项目,需要引入logback-classic
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
进入logback-classic会发现内部已经引入slf4j-api和logback-core
如果是springboot/cloud项目,只需要引入spring-boot-starter-web即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
我们来看一下为什么
进入 spring-boot-starter-web 找到 spring-boot-starter
进入 spring-boot-starter 找到 spring-boot-starter-logging
进入 spring-boot-starter-logging 找到 logback-classic
进入 logback-classic 找到 slf4j-api和logback-core
三. yml文件配置
开发/测试环境打开mybatis日志
mybatis-plus:
global-config:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
四. logback-spring.xml文件配置
在springboot项目/springcloud每个模块 的resources下创建 logback-spring.xml文件
要修改一下log.name,推荐logs/项目名称,如果是微服务项目,推荐logs/模块名称
按需选择是否注释修改最后面的不同环境的日志级别配置:开发环境推荐debug级别,生产环境推荐info级别
如果是微服务项目,把logback-spring.xml在每一个模块下的resources都添加一份,把log.name修改一下即可
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<contextName>logback</contextName>
<!--必须修改:改成你的日志文件名,下面配置表示:在项目启动目录下,创建个logs文件夹,并将日志写入到demo.log文件中-->
<property name="log.name" value="logs/这里改为模块名称"/>
<!--输出到控制台 ConsoleAppender-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--必须要配置:下面配置含义,当单个日志文件大小超过100M后,会生成新日志文件,并将旧其按日志进行打包压缩,当日志总大小超过10G或者日志时间超过7天,就吧最老的日志删除,避免日志撑爆服务器硬盘导致服务器宕机-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.name}.log</file>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${log.name}.%d{yyyy-MM-dd}.%i.log.gz</FileNamePattern>
<!-- 单个日志文件最多 100MB -->
<maxFileSize>100MB</maxFileSize>
<!--只保留最近7天的日志-->
<maxHistory>7</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<charset>UTF-8</charset>
<pattern>%d [%t] %-5level %logger{36}.%M\(%file:%line\) - %msg%n</pattern>
</encoder>
</appender>
<!-- <root level="info">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>-->
<logger name="org.springframework" level="warn"/>
<springProfile name="local">
<!-- 打印mybatis日志 -->
<logger name="cn.enn.smart.mapper" level="debug"/>
<root level="info">
<appender-ref ref="console"/>
<!--本地环境时,不写入日志文件 -->
</root>
</springProfile>
<springProfile name="dev">
<!-- 打印mybatis日志 -->
<logger name="cn.enn.smart.mapper" level="debug"/>
<root level="debug">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</springProfile>
<springProfile name="test">
<!-- 打印mybatis日志 -->
<logger name="cn.enn.smart.mapper" level="debug"/>
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</springProfile>
<springProfile name="pro">
<!-- 打印mybatis日志 -->
<logger name="cn.enn.smart.mapper" level="debug"/>
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</springProfile>
</configuration>