springboot集成logback日志框架


默认日志Logback

SLF4J——Simple Logging Facade For Java,它是一个针对于各类Java日志框架的统一Facade抽象。Java日志框架众多——常用的有java.util.logginglog4jlogbackcommons-logging, Spring框架使用的是Jakarta Commons Logging API (JCL)。而SLF4J定义了统一的日志抽象接口,而真正的日志实现则是在运行时决定的——它提供了各类日志框架的binding。

Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。

官方测试报告:https://logging.apache.org/log4j/log4j-2.3/manual/async.html

1.maven依赖


    org.springframework.boot
    spring-boot-starter-logging

2.logback-spring.xml 文件

<?xml version="1.0" encoding="UTF-8"?>








    
    
    
    
    


    
    
    
    
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
    
    
              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}}"/>

    
    class="ch.qos.logback.core.ConsoleAppender">
        
        class="ch.qos.logback.classic.filter.ThresholdFilter">
            info
        
        
            ${CONSOLE_LOG_PATTERN}
            
            UTF-8
        
    


    

    
    class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        ${log.path}/log_debug.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            UTF-8 
        
        
        class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            ${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                100MB
            
            
            15
        
        
        class="ch.qos.logback.classic.filter.LevelFilter">
            debug
            ACCEPT
            DENY
        
    

    
    class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        ${log.path}/log_info.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{100} - %msg%n
            UTF-8
        
        
        class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            ${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                100MB
            
            
            15
        
        
        class="ch.qos.logback.classic.filter.LevelFilter">
            info
            ACCEPT
            DENY
        
    

    
    class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        ${log.path}/log_warn.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            UTF-8 
        
        
        class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            ${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                100MB
            
            
            15
        
        
        class="ch.qos.logback.classic.filter.LevelFilter">
            warn
            ACCEPT
            DENY
        
    


    
    class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        ${log.path}/log_error.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            UTF-8 
        
        
        class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            ${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                100MB
            
            
            15
        
        
        class="ch.qos.logback.classic.filter.LevelFilter">
            ERROR
            ACCEPT
            DENY
        
    

    

    

    

    
        
        
        
        
        
    

    
    
    
    

    
    
    
    
    
    
    
    
    
    

3.SpringBoot修改日志配置

# 不指定路径在当前项目下生成springboot.log日志
logging.path=
# 可以指定完整的路径;
# 使用 spring.log 作为默认文件
#logging.file=G:/springboot.log
# 也可以在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;
#logging.path=/spring/log

#  在控制台输出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n

日志输出的含义说明:

%d表示日期时间,
%thread表示线程名,
%‐5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。 %msg:日志消息,
%n是换行符
‐‐>
%d{yyyy‐MM‐dd HH:mm:ss.SSS} [%thread] %‐5level %logger{50} ‐ %msg%n

4.日志输出效果