springboot 使用 slf4j + logback 记录日志

在写项目的时候,对于一些重要的信息,或者程序抛出的异常,我们一般都会用日志记录下来。方便后期排查问题。在springboot项目中,我一般使用 Slf4j+logback 作为日志框架。下面就简单介绍一下他们的使用

Slf4j

The Simple Logging Facade for Java的简称,是一个简单日志门面抽象框架,它本身只提供了日志Facade API和一个简单的日志类实现,一般常配合Log4j,LogBack,java.util.logging使用。
使用:

yml简单配置 (用了logback-spring.xml就可以不需要这些配置)

logging:
  #生成的日志文件名
  file: doc/mybatis.log
  #相关包的日志级别
  level:
    top.lvjp.mybatis: info
    top.lvjp.mybatis.mapper: trace
  pattern:
    #控制台输出日志格式
    console: "%d{yyyy-MM-dd HH:mm:ss.SSS} - %-5level [%thread] %logger - %msg%n"
public class Test{
    private final Logger log = LoggerFactory.getLogger(Test.class);
	
	public void test (String param)  {
		// 重要的有用的的数据才打印,不然影响程序运行效率
		log.info("接收到一个参数 param={}", param);
		try{
			// 假装对context操作时,抛出了一个异常
			throw new RuntimeException("test");
		} catch {
			// 打印相关的信息,以及异常的方法栈信息
			log.error("这里报错了, param={}", param, e);
		}
	}
}

Logback

LogBack 被分为3个组件
  • logback-core 提供了LogBack的核心功能,是另外两个组件的基础。
  • logback-classic 则实现了Slf4j的API,所以当想配合Slf4j使用时,需要将logback-classic加入classpath。
  • logback-access 是为了集成Servlet环境而准备的,可提供HTTP-access的日志接口。
logback中三个重要概念:
  • Logger: 日志记录器,把它关联到应用对应的context上后,主要用于存放日志对象,定义日志类型,级别。
  • Appender: 指定日志输出的目的地,目的地可以是控制台,文件,或者数据库等
  • Layout: 负责把事件转换成字符串,格式化日志信息的输出
maven依赖
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <!--logback-classic中已经引入了slf4j-api和logback-core依赖-->
</dependency>
logback-spring.xml配置

SpringBoot官方推荐优先使用带有-spring的文件名作为日志配置(可以为它添加一些SpringBoot特有的配置项)。不过也可以通过logging.config属性自定义的名字:

# 指定配置文件
logging.config=classpath:logging-config.xml

这里使用 logback-spring.xml 作为文件名

<?xml version="1.0" encoding="UTF-8"?>
<!--
    scan: 默认为true,如果配置文件发生改变,将会被重新加载
    scanPeriod: scan为true生效,默认一分钟,监测配置文件是否有修改,若没给时间单位,默认为毫秒
    debug: 默认false,不打印logback内部日志信息
-->
<configuration scan="true" scanPeriod="6000" debug="false">
    <!-- 上下文 -->
    <contextName>logback</contextName>
    <!-- 设置变量name,通过${name}取值 -->
    <property name="log.path" value="doc/logback" />

    <!--appender用来格式化日志输出的节点,class用来指定哪种输出策略,常用的为控制台和文件输出策略-->
    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 添加 范围 过滤 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!-- %d 日志输出时间, %thread 输出日志的进程名字, %-5leve 日志级别,并使用5个字符向左对齐, %msg 日志信息, %n 平台的换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </layout>
    </appender>

    <appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--<file>${log.path}</file>-->
        <!-- 按天数输出日志文件,一天一个 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名的格式 -->
            <fileNamePattern>${log.path}/mybatis-%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志文件保留的最大天数 -->
            <maxHistory>60</maxHistory>
            <!-- 总的日志文件大小的上限-->
            <totalSizeCap>100MB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="infoFile" class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 要拦截的日志级别-->
            <level>ERROR</level>
            <!-- 如果匹配,则禁止-->
            <onMatch>DENY</onMatch>
            <!-- 如果不匹配,则允许记录-->
            <onMismatch>ACCEPT</onMismatch>
        </filter>
    </appender>

    <!-- root节点用来指定最基础的日志输出级别, level属性设置打印级别,默认debug -->
    <root level="INFO">
        <appender-ref ref="console" />
        <appender-ref ref="errorFile" />
        <appender-ref ref="infoFile" />
    </root>
</configuration>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
集成Spring Boot、Lombok、SLF4JLogback有以下几个步骤: 1. 引入依赖:在`pom.xml`文件中引入以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Lombok依赖 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- SLF4J依赖 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <!-- Logback依赖 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> ``` 2. 创建日志配置文件:在`src/main/resources`目录下创建`logback.xml`文件,并在其中配置日志输出格式、日志级别等信息。示例配置文件如下: ``` <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 定义日志输出格式 --> <property name="LOG_PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/> <!-- 控制台输出 --> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> <!-- 文件输出 --> <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/spring-boot-demo.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/spring-boot-demo-%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> <!-- 定义日志级别 --> <root level="INFO"> <appender-ref ref="consoleAppender"/> <appender-ref ref="fileAppender"/> </root> </configuration> ``` 3. 在代码中使用SLF4J使用SLF4J的API进行日志输出,示例代码如下: ``` 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 HelloController { private static final Logger LOGGER = LoggerFactory.getLogger(HelloController.class); @GetMapping("/hello") public String hello() { LOGGER.debug("debug message"); LOGGER.info("info message"); LOGGER.warn("warn message"); LOGGER.error("error message"); return "Hello, world!"; } } ``` 4. 使用Lombok简化代码:使用Lombok注解简化代码,示例代码如下: ``` import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @Slf4j public class HelloController { @GetMapping("/hello") public String hello() { log.debug("debug message"); log.info("info message"); log.warn("warn message"); log.error("error message"); return "Hello, world!"; } } ``` 以上就是集成Spring Boot、Lombok、SLF4JLogback的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值