• SpringBoot输出日志到文件


    1 基本信息

    • SpringBoot版本2.2.5
    • 日志框架SLF4J
    • 日志框架的实现LockBack

    2 输出文件的配置

    2.1 logging.file.name

    指定日志文件的位置。

    2.1.1 例1

    使用相对路径,就会在项目根目录下生成一个lab.log文件

    logging:
      file:
        name: lab.log
    

    2.1.1 例2

    在项目根目录下生成一个logs文件夹,logs文件夹里面生成一个lab.log文件。

    logging:
      file:
        name: logs/lab.log
    

    2.1.1 例3

    使用绝对路径,这样写会在D盘下创建一个logs文件夹,logs文件夹里面生成一个lab.log文件。

    logging:
      file:
        name: D:/logs/lab.log
    

    2.2 logging.file.path

    2.2.1 指定路径时生成的文件名为spring.log

    2.2.2 例1

    使用相对路径,会在项目根目录下生成一个logs文件夹,logs文件夹会有一个spring.log文件。

    logging:
      file:
        path: logs
    

    2.2.2 例2

    使用绝对路径,会在D盘下生成一个logs文件夹,logs文件夹会有一个spring.log文件。

    logging:
      file:
        name: D:/logs
    

    2.3 注意

    logging.file.name和logging.file.path不要同时指定,只需要指定一个。

    相对路径不指定盘符,直接在项目根目录下生成

    3 使用xml扩展

    在resources目录下创建logback-spring.xml配置文件。

    使用xml配置可以完成yml配置实现不了的功能,比如按天将日志归档。

    xml有多种命名形式,但官方推荐的命名是logback-spring.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
        <contextName>logback</contextName>
    
        <!--控制台输出内容的颜色转换以及格式-->
        <substitutionProperty name="logging.pattern.console"
                              value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-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}"/>
        <!--日志文件输出内容的格式-->
        <substitutionProperty name="logging.pattern.file"
                              value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
    
        <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"/>
    
        <!--输出到控制台-->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <!--控制台使用layout节点-->
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>
                    ${logging.pattern.console}
                </pattern>
            </layout>
        </appender>
    
        <!--按天生成日志-->
        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <Prudent>true</Prudent>
            <!--滚动策略,我配置了按天生成日志文件-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--相对路径,生成的文件就在项目根目录下-->
                <FileNamePattern>
                    logs/%d{yyyy-MM}/%d{yyyy-MM-dd}.log
                </FileNamePattern>
                <!--注意超过365天的日志文件会被删除,即使已经按天分开也会删除-->
                <MaxHistory>365</MaxHistory>
            </rollingPolicy>
            <!--日志文件里只保存ERROR及以上级别的日志-->
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>ERROR</level>
            </filter>
            <!--文件使用encoder节点-->
            <encoder>
                <Pattern>
                    ${logging.pattern.file}
                </Pattern>
            </encoder>
        </appender>
    
        <!--这个logger里的配置相当于之前yml里的logging.level.com.lpc: trace-->
        <!--additivity的作用-->
        <!--true,则子Logger不止会在自己的appender里输出,还会在root的logger的appender里输出-->
        <!--而这个logger里没配置appender,所以得交给root打印-->
        <!--所以com.lpc包里的日志从TRACE级别开始-->
        <!--其他包里的日志根据root的配置从INFO级别开始打印-->
        <logger name="com.lpc" level="TRACE" additivity="true">
        </logger>
    
        <root level="INFO">
            <appender-ref ref="console"/>
            <appender-ref ref="file"/>
        </root>
    
    </configuration>
    

    其中,两个的value属性是yml的logging.pattern.console和logging.pattern.file的默认值粘贴出来的。xml文件放在了resources.config目录下。日志文件输出在项目根目录下的logs文件夹下。

    这个xml配置实现了:

    1. 控制台输出日志,同时将日志保存到文件里;
    2. 保持控制台日志的彩色;
    3. 按月建日志文件夹,按天建日志文件;
    4. com.lpc包下的日志从TRACE级别开始输出,其他包(比如tomcat的日志,SpringSecurity的日志)从INFO级别开始输出。跟原来yml里面配置logging.level.com.lpc: trace的输出结果保持一致。

    4 logging里的默认值

    logging.pattern.console

    %clr(%d{${LOG_DATEFORMAT_PATTERN:-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}
    

    logging.pattern.file

    %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
    

    5 效果

    效果.png

    本文由博客群发一文多发等运营工具平台 OpenWrite 发布

  • 相关阅读:
    手机web页面调用手机QQ实现在线聊天的效果
    Java EE 6 最终草案暗示了平台的未来发展方向
    NetBeans 时事通讯(刊号 # 77 Oct 21, 2009)
    Java 依赖注射规范(JSR330)正式发布
    NetBeans IDE 6.8 里程碑 2 已经可用!
    Java 依赖注射规范(JSR330)正式发布
    对面向对象和面向过程的一些新理解
    NetBeans 时事通讯(刊号 # 76 Oct 13, 2009)
    Java EE 6 最终草案暗示了平台的未来发展方向
    “当前不会命中断点。源代码与原始版本不同”的问题的有效解决办法
  • 原文地址:https://www.cnblogs.com/FatShallot/p/12697567.html
Copyright © 2020-2023  润新知