SpringBoot 按日期输出日志文件

  • 日常
  • 2020-01-09 22:55:45
  • 浏览 331
简介在项目运行的过程中,通过在一些关键节点生成日志,可了解项目是否发生不可预期的异常,也方便在后期维护中,定位异常发生的位置,做出及时的判断和维护。

警告:该以下操作,只适合单点服务,不适合集群环境。
建议:集群环境下,请使用ELK等日志分析系统。

配置 logback

在 SpringBoot 环境下,应该尽量避免使用 xml 配置文件的,但是 logback 不支持代码配置,所以还是需要用 xml 配置的。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 日志文件主目录 -->
    <define name="LOG_HOME" class="com._365d1.config.logback.LogDirConfig" />

    <!-- 默认配置 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <!-- 配置控制台(Console) -->
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

    <!-- 配置日志文件(File) -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 设置策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件路径:这里%d{yyyyMMdd}表示按天分类日志 -->
            <FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/%i.log</FileNamePattern>
            <!-- 启用日志清理 -->
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
            <!-- 日志保留天数 -->
            <maxHistory>30</maxHistory>
            <!-- 日志文件最大的大小 -->
            <maxFileSize>10MB</maxFileSize>
        </rollingPolicy>
        <!-- 设置格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <!-- 或者使用默认配置 -->
            <!-- <pattern>${FILE_LOG_PATTERN}</pattern> -->
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!-- root节点 全局日志级别,用来指定最基础的日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="FILE"/>
        <appender-ref ref="CONSOLE"/>
    </root>

</configuration>

主要是配置使用 RollingFileAppender 来控制日志的生成,配置日志生成目录的时候,需要用 define 来定义,否则日志生成的目录,不一定受控制,define 定义的变量代码。

@Component
public class LogDirConfig extends PropertyDefinerBase {

    private String LOG_HOME;

    @Override
    public String getPropertyValue() {
        this.LOG_HOME = PathUtils.getAbsolutePath("log");
        return this.LOG_HOME;
    }

}

代码PathUtils.getAbsolutePath只是封装里获取 jar 包所在的目录而已。

文章评论