SpringBoot整合logbak.xml输出日志到指定目录

  • 前言
  • 一、logging.file属性指定日志文件路径
  • 二、使用logback.xml文件扩展配置
  • 正常启动日志: ![在这里插入图片描述](https://s2.51cto.com/images/blog/202308/11094435_64d59283a5e8c33798.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) 配置了文件最大值为30kb,当文件大小超过这个值时就会按照配置的格式生成对应的压缩包日志文件。 ![在这里插入图片描述](https://s2.51cto.com/images/blog/202308/11094435_64d59283c225684372.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
  • 总结



前言

springboot整合logback,设置输出日志。

logback是一款开源日志组件,属于Log4j的升级版本。

日志级别有(从高到低):FATAL(致命),ERROR(错误),WARN(警告),INFO(信息),DEBUG(调试),TRACE(跟踪)或者 OFF(关闭),默认的日志配置在消息写入时将消息回显到控制台。

一、logging.file属性指定日志文件路径

默认情况下,SpringBoot日志只记录到控制台,不写日志文件。因此,如果仅需要简单的设置日志,则可以选择在application.yml文件中作如下的配置即可:

logging:
  level:
    root: info #日志级别
  file:
    name: E:/Project_code/logs/spring-dev.log #文件路径

启动项目,可以看到指定目录下已经生成了配置的日志文件。

二、使用logback.xml文件扩展配置

SpringBoot默认扫描classpath下面的logback.xml、logback-spring.xml配置文件,所以不需要再指定spring.logging.config, 一般我们将 logback.xml 文件直接放到 resource目录下即可。
logback.xml配置文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!--scan属性为true时表示配置文件爱你如果发生变更,将会被重新加载;scanPeriod默认单位是毫秒-->
<configuration debug="false" scan="true" scanPeriod="3 seconds">

    <contextName>logback</contextName>
    <property name="log.path" value="logs/springboot-mybatisplus.log"/>
    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH-mm-ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
        </filter>
    </appender>

    <!--输出日志到文档-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}</file>
        <!--日志记录器的滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>30KB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保存天数-->
            <maxHistory>2</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH-mm-ss.SSS} %level [%thread] %logger{36} [%file : %line] %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
        </filter>
    </appender>
    <!--root节点用于指定全局日志级别-->
    <root level="debug">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>
    <!--指定具体包目录下的日志级别,可用于日志输出过滤,此处配置的优先级高于root配置的日志输出级别-->
    <logger level = 'warn' name = 'org.springframework'/>
    <logger level = 'info' name = 'com.baomidou.mybatisplus'/>
    <logger level = 'error' name = 'com.alibaba'/>
</configuration>

文件存放位置:

logback日志输出到mysql数据库 logback输出指定目录_sed

启动项目可能会出现如下报错,是因为对应的属性没有给定class路径。

logback日志输出到mysql数据库 logback输出指定目录_sed_02


logback日志输出到mysql数据库 logback输出指定目录_spring boot_03


只需要,标签加上class配置就好了:

<filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>debug</level>
</filter>

<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <maxFileSize>30KB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>

正常启动日志: 配置了文件最大值为30kb,当文件大小超过这个值时就会按照配置的格式生成对应的压缩包日志文件。

总结

配置springboot日志输出文件时,如果logback.xml配置文件中没有涉及读取全局配置文件(例如application.properties)中的属性时,将文件命名为logback.xml没有问题;一旦有涉及读取全局配置文件中的属性值时,日志配置文件要命名为logback-spring.xml,因为这里涉及到一个加载顺序的问题(logback.xml会在application.properties加载之前加载,logback-spring.xml会在application.properties加载之后加载)。