zoukankan      html  css  js  c++  java
  • 设置spring-boot的logging

    spring-boot默认使用logback来记录logger,spring-boot的包里面org.springframework.boot.logging.logback路径下面有一些配置文件,默认的情况下会使用base.xml,它把日志输出到控制台和文件之中。它的内容是:

    <included>
        <include resource="org/springframework/boot/logging/logback/defaults.xml" />
        <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
        <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
        <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="FILE" />
        </root>
    </included>

    对于输出到文件,如果设置了logging.file就使用该值作为文件名称,如果设置了logging.path就使用logging.path/spring.log作为文件名称,如果都没有设置就放入临时文件中。

    那么问题来了,如果要写入文件的话,一个文件不会被写得很大吗?
    这个时候就可以看base.xml里面includeorg/springframework/boot/logging/logback/file-appender.xml

    我们来看看org/springframework/boot/logging/logback/file-appender.xml里面是什么东西

    <included>
        <appender name="FILE"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
            <file>${LOG_FILE}</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                <fileNamePattern>${LOG_FILE}.%i</fileNamePattern>
            </rollingPolicy>
            <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
    </included>

    是的,默认的配置里面有个SizeBasedTriggeringPolicy来表示文件的大小,每个文件到了10MB的时候就会重新开启一个文件,并且把之前的名称命名成${LOG_FILE}.%i,这样就解决了日志文件过大的问题。

    有人可能想问,这些都是默认的配置,如果我不想使用默认的配置,我想按照天来切割日志,应该如何设置呢?

    可以在resources目录下面创建一个logback-spring.xml的文件,并且给出自己想要的配置,这里给一个简单的配置是的日志文件可以按天为单位来切割日志文件

    <?xml version="1.0" encoding="UTF-8"?>
     <configuration>
        <include resource="org/springframework/boot/logging/logback/defaults.xml" />
        <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
        <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
         <appender name="TIME_FILE"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
            <file>${LOG_FILE}</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i</fileNamePattern>
                <maxHistory>365</maxHistory>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
         </appender>
         <root level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="TIME_FILE" />
         </root>
    </configuration>

    上面%d{yyyy-MM-dd}表示命名的文件名字以原始的名字后面加上日期作为后缀,<maxFileSize>100MB</maxFileSize>表示每个文件大小为100MB。这样日志文件就会以日期来进行切割并且进行保存了。

    所以说如果要自定义日志的格式, 就可以通过自己编写logback-spring.xml这个文件来自己定义了。

    最后在配置文件appication.yaml设置好文件名称和日志级别就可以了

    spring:  
      application:    
        name: spring-boot-logging
    
    logging:  
      file: ./logs/spring-boot-logging.log  
      level:    
        com.dragon.study.spring.boot: DEBUG

    如果需要在logback-spring.xml自定义一些配置文件,可以使用

        <springProperty scope="context" name="SYSLOG_HOST" source="logging.syslog.host" defaultValue="syslog.hostname" />
        <springProperty scope="context" name="SYSLOG_FACILITY" source="logging.syslog.facility" defaultValue="LOCAL7"/>
    
        <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
            <syslogHost>${SYSLOG_HOST}</syslogHost>
            <facility>${SYSLOG_FACILITY}</facility>
        </appender>

    然后在appication.yaml的配置文件中加入

    logging.syslog.facility: syslog.change.hostname
    logging.syslog.facility: LOCAL1

    配置进行替代默认值

    PS: 遇到一个坑, 就是想关掉某个包下面的日志,不能直接

    logging:  
      level:    
        com.dragon.study.spring.boot: OFF

    因为OFF是yaml的关键字,上面那么写没有任何作用
    所以如果想关掉某个包下面的日志的正确方法是 OFF上面加上单引号

    logging:  
      file: ./logs/spring-boot-logging.log  
      level:    
        com.dragon.study.spring.boot: 'OFF'

    最后如果觉得所讲的东西能够帮助到你,并且希望进行更详细的深入的学习,欢迎加群632109190进行讨论和学习。

  • 相关阅读:
    JavaScript实现上传图片预览[js前端实现]
    Java内存Happen-Before
    《干净架构读书笔记》——业务驱动编程
    《干净架构读书笔记》——编程范式
    Scrum中的冲刺和迭代
    Spring Cloud中通过Kafka传递自定义Header
    领域驱动开发(DDD)Web开发中的典型分层
    给开发团队减减负
    业务实体和用例
    什么是好的代码-代码Review要点
  • 原文地址:https://www.cnblogs.com/mawang/p/6746429.html
Copyright © 2011-2022 走看看