spring boot 默认日志框架logback

spring boot 默认日志框架logback

spring boot默认使用logback作为日志框架

spring boot 默认日志框架logback_第1张图片

Logback 和 Log4j 都是 Java 中常用的日志框架,而 Logback 实际上是 Log4j 的后继者,由 Log4j 的创始人 Ceki Gülcü 开发。Logback 旨在修复一些 Log4j 的设计缺陷并提供更好的性能。

一些主要的区别和改进包括:

  1. 性能优化: Logback 在性能上进行了一些优化,相对于 Log4j,它在一些方面可能表现更好。

  2. 配置简单: Logback 的配置相对简单,支持 Groovy 配置文件,相比 Log4j 更容易理解和配置。

  3. 内置实现: Logback 包含了 Log4j 的一些功能,并添加了一些新特性,如 SiftingAppender 和 TurboFilter。

尽管 Logback 是 Log4j 的后继者,但在实际项目中,选择使用哪个取决于项目的具体需求和个人偏好。在 Spring Boot 中,默认使用的是 Logback,但你也可以根据需要切换到其他日志框架。

下面说说springboot中的logback的简单配置与使用

1. 配置文件

默认情况下,springboot会自动加载logback-spring.xml或者logback.xml配置文件,只需要在类路径下添加该文件即可。

在resource目录下创建logback.xml文件



<configuration debug="false">
   
    
    <property name="LOG_HOME" value="D://logs" />

    
        

    
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
        encoder>
    appender>

    
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <append>trueappend>

        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFOlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${LOG_HOME}/test.%d{yyyy-MM-dd}-info.logfileNamePattern>
            
            <maxHistory>30maxHistory>
        rollingPolicy>

        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%npattern>
            <charset>UTF-8charset>
        encoder>

        
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MBMaxFileSize>
        triggeringPolicy>
    appender>

     
    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <append>trueappend>

        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARNlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${LOG_HOME}/test.%d{yyyy-MM-dd}-warn.logfileNamePattern>
            
            <maxHistory>30maxHistory>
        rollingPolicy>

        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%npattern>
            <charset>UTF-8charset>
        encoder>

        
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MBMaxFileSize>
        triggeringPolicy>
    appender>

    
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <append>trueappend>

        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERRORlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${LOG_HOME}/test.%d{yyyy-MM-dd}-error.logfileNamePattern>
            
            <maxHistory>30maxHistory>
        rollingPolicy>

        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%npattern>
            <charset>UTF-8charset>
        encoder>

        
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MBMaxFileSize>
        triggeringPolicy>
    appender>


    
    <root level="INFO">
        
        <appender-ref ref="CONSOLE"/>
        
        <appender-ref ref="INFO" />
        <appender-ref ref="WARN" />
        <appender-ref ref="ERROR" />
    root>

configuration>

2.使用

配置完xml文件下便可以使用Logger来进行日志记录

// import org.slf4j.LoggerFactory;

@RestController
@RequestMapping("/test")
public class TestController {

    Logger logger = LoggerFactory.getLogger(TestController.class);
    @GetMapping
    public Result get(){
        System.out.println("执行业务方法");
        logger.info("业务方法执行成功");
        return new Result(200,"请求成功","这是data");
    }
}

3.注解式声明

每个类都需要声明日志变量比较麻烦,可以使用lombok插件,在maven中引入lombok依赖


    <dependencies>
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>
    dependencies>


	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.bootgroupId>
				<artifactId>spring-boot-maven-pluginartifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombokgroupId>
							<artifactId>lombokartifactId>
						exclude>
					excludes>
				configuration>
			plugin>
		plugins>
	build>

此时可以使用@Slf4j注解标注目标类,类中可以直接使用 变量log来使用日志记录,例如

// import lombok.extern.slf4j.Slf4j;

@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping
    public Result get(){
        System.out.println("执行业务方法");
        log.info("业务方法执行成功");
        return new Result(200,"请求成功","这是data");
    }
}

4.结果

日志文件:

spring boot 默认日志框架logback_第2张图片

内容输出:

spring boot 默认日志框架logback_第3张图片

5. 更正一点

在实际测试中发现了日志没有按天输出,只会append在同一个文件中,导致日志文件越来越大(例如11号的日志追加在10号的日志中,不会生成新的日志文件)
经查阅,是TimeBasedRollingPolicySizeBasedTriggeringPolicy冲突,如果想要按天生成日志,需要注释掉 SizeBasedTriggeringPolicy ,如

    
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <append>trueappend>

        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERRORlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${LOG_HOME}/test.%d{yyyy-MM-dd}-error.logfileNamePattern>
            
            <maxHistory>30maxHistory>
        rollingPolicy>

        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%npattern>
            <charset>UTF-8charset>
        encoder>

		



    appender>

你可能感兴趣的:(spring,boot,logback,单元测试)