Skip to content

springboot日志文件配置

一、日志文件创建

创建 日志文件logback-spring.xml,官方推荐 -spring.xml结尾 默认加载加载配置顺序 logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy。 注意是logback-spring.xml文件而不是logback.xml文件,因为logback.xml文件早于application.yml加载,logback-spring.xml文件晚于application.yml文件加载。

#===========logback示例===========
# 设置##
log4j:
  rootLogger: debug,stdout,D,E
  appender:
    stdout:
      Target: System.out
      layout: org.apache.log4j.PatternLayout
      ConversionPattern: [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
    # 输出DEBUG 级别以上的日志到=D://logs/error.log ##
    D: org.apache.log4j.DailyRollingFileAppender
      File: D://logs/log.log
      Append: true
      Threshold: DEBUG
      layout: org.apache.log4j.PatternLayout
      layout.ConversionPattern: %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    # 输出ERROR 级别以上的日志到=D://logs/error.log ##
    E: org.apache.log4j.DailyRollingFileAppender
      File: E://logs/error.log
      Append: true
      Threshold: ERROR
      layout: org.apache.log4j.PatternLayout
      ConversionPattern: %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

#===========logback============
#使用最简单的配置进行日期分类
logging:
    path: ${user.home}/log/%d{yyyyMMdd} #日志文件路径 这里${user.home}为当前服务器用户主目录
    file: ${spring.application.name}.log #日志文件名称 ${spring.application.name}为应用名
    level:
      root: info #日志级别 root表示所有包,也可以单独配置具体包 fatal error warn info debug trace off

注释:

<configuration> 子节点
<appender></appender>
<logger></logger>
<root></root>(要加在最后)

三、日志配置文件转换

Log4j日志转换为logback在线工具(支持log4j.properties转换为logback.xml,不支持 log4j.xml转换为logback.xml) https://logback.qos.ch/translator/

四、logback的xml文件配置

对日志进行日期划分等等

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds">

    <contextName>logback</contextName>
    <!--默认配置-->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <!--配置控制台(Console)-->
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
    <!-- 获取应用名称 -->
    <springProperty scope="context" name="APP_NAME" source="spring.application.name"  defaultValue="default"/>
    <!-- 从spring配置文件获取值 -->
    <springProperty scope="context" name="LOG_HOME" source="logging.file.path" defaultValue="/tmp/log"/>
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
    <property name="logPath" value="${LOG_HOME}/${APP_NAME}"/>

      <!-- 文件日志样式 -->
    <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{60} - %msg%n"/>

    <!--文件输出,日志时间窗口滚动-->
    <appender name="DATE_File" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
        <File>${logPath}/out.log</File>
        <!--        按天生成-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名,可设置文件类型为gz,开启文件压缩-->
            <!--            按天生成-->
            <FileNamePattern>${logPath}/date-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <maxFileSize>500MB</maxFileSize>
        </rollingPolicy>
        <!--        按小时生成-->
        <!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
        <!--            &lt;!&ndash;日志文件输出的文件名,可设置文件类型为gz,开启文件压缩&ndash;&gt;-->
        <!--            &lt;!&ndash;            按小时生成&ndash;&gt;-->
        <!--            <FileNamePattern>${logPath}/%d{yyyy-MM-dd.HH}-%i.log</FileNamePattern>-->
        <!--            &lt;!&ndash;日志文件保留小时数&ndash;&gt;-->
        <!--            <MaxHistory>72</MaxHistory>-->
        <!--            &lt;!&ndash;按大小分割同一天的&ndash;&gt;-->
        <!--            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
        <!--                <maxFileSize>200MB</maxFileSize>-->
        <!--            </timeBasedFileNamingAndTriggeringPolicy>-->
        <!--        </rollingPolicy>-->

        <!--输出格式-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <!--设置编码-->
            <charset>UTF-8</charset>
        </encoder>

    </appender>

    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="DATE_File"/>
    </root>

</configuration>

new

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds">

    <!--<include resource="org/springframework/boot/logging/logback/base.xml" />-->

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

    <!-- 彩色日志 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

    <!-- 控制台日志样式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr([%15.15t]){faint} [%X{requestId}] %clr(%-40.40logger{39}){cyan} [%L] %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <!-- 文件日志样式 -->
    <property name="FILE_LOG_PATTERN"
              value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} [%t] [%X{requestId}] %-40.40logger{39} %L : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <!-- 获取应用名称 -->
    <springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="default"/>
    <!-- 从spring配置文件获取值 -->
    <springProperty scope="context" name="LOG_HOME" source="logging.file.path" defaultValue="/tmp/log"/>
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
    <property name="logPath" value="logs"/>

    <!-- 控制台 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    <!--文件输出,日志时间窗口滚动-->
    <appender name="DATE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
        <File>${logPath}/info-out.log</File>
        <!--        按天生成-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名,可设置文件类型为gz,开启文件压缩-->
            <!--            按天生成-->
            <FileNamePattern>${logPath}/info-date-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <maxFileSize>500MB</maxFileSize>
        </rollingPolicy>

        <!--输出格式-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <!--设置编码-->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--文件输出,日志时间窗口滚动-->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
        <File>${logPath}/error-out.log</File>
        <!--        按天生成-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名,可设置文件类型为gz,开启文件压缩-->
            <!--            按天生成-->
            <FileNamePattern>${logPath}/error-date-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <maxFileSize>500MB</maxFileSize>
        </rollingPolicy>
        <!--输出格式-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <!--设置编码-->
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 异步写日志 -->
    <appender name="ASYNC_DATE_FILE" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <appender-ref ref="DATE_FILE"/>
    </appender>
    <appender name="ASYNC_ERROR_FILE" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <appender-ref ref="ERROR_FILE"/>
    </appender>

    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="ASYNC_DATE_FILE"/>
        <appender-ref ref="ASYNC_ERROR_FILE"/>
    </root>

</configuration>