Springboot日志-Logback

120 阅读1分钟

概述

Sl4j定义了常用的日志接口,而Log4j、Logback是两个实现了Sl4j的日志框架。Springboot的starter默认引入了Logback日志框架,可以直接使用,无需额外依赖

  • 日志接口:Sl4j
  • 日志框架:Log4j、Logback
  • 推荐:Sl4j + Logback (Springboot默认引入)

Logback

Springboot中有两种配置方式,yml和logback-spring.xml,其中logback-spring.xml优先于yml方式

方式一:yml

  • 简单 | 功能少
  • 默认最大10MB分割
logging:
  level:
    com.fun: debug
  file:
    name: C:\\logs\system-center.txt

方式二:logback-spring.xml

  • 复杂 | 功能多 | 支持压缩(能小100倍)
  • 放到application.yml同级目录即可
  • 格式参考: logback-spring.xml格式
<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="60 seconds" debug="false">
    <!--##################################################常用变量######################################################-->
    <!--日志路径-->
    <property name="log.path" value="./logs" />

    <!--##################################################固定常量######################################################-->
    <!-- 引入spirng boot默认的logback配置文件 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <!--自定义的pattern,没有颜色,推荐使用springboot默认pattern格式CONSOLE_LOG_PATTERN、FILE_LOG_PATTERN-->
    <property name="funPattern" value="%d{YYYY-MM-dd HH:mm:ss.SSS} %-5level [%15.15thread] %-40.40logger{39}: %msg%n"></property>
    <!--日志名称,自动获取springboot的应用名-->
    <springProperty scope="context" name="spring.application.name" source="spring.application.name"/>

    <!--##################################################输出到控制台######################################################-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!--##################################################输出到文件######################################################-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--实时日志-->
        <file>${log.path}/${spring.application.name}.log</file>
        <!--归档日志-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 后缀以".zip"或".gz"结尾,则开启日志文件压缩 -->
            <fileNamePattern>${log.path}/${spring.application.name}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
            <!--单个最大日志-->
            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <MaxFileSize>200MB</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
            <!-- 日志文件保留最大时间滚动周期,比如当filaNamePattern中%d以为dd结尾时,则保留60天-->
            <maxHistory>60</maxHistory>
            <!-- 日志文件保留的总的最大大小-->
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!--##################################################日志配置######################################################-->
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    </root>

    <logger name="com.fun.*" level="debugger" additivity="false">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    </logger>
</configuration>
  • Pattern
    • 默认是右对齐,-是左对齐
    • .的左侧数字代表最小宽度,.的右侧数字代表最大宽度
写法左对齐最小宽度最大宽度
%20loggerfalse20none
%.30loggerNAnone30
%-20.30loggertrue2030