如何在 Spring Boot 的 application.yml 中配置滚动文件附加程序

Posted

技术标签:

【中文标题】如何在 Spring Boot 的 application.yml 中配置滚动文件附加程序【英文标题】:How to configure rolling file appender within Spring Boot's application.yml 【发布时间】:2015-07-07 05:44:15 【问题描述】:

是否可以在 Spring Boot 应用程序的 application.yml 中配置每日文件附加程序?

即文件名模式:myfile.%dyyyy-MM-dd-HH-mm-ss.log

我的 application.yml 文件中有如下配置。

logging:

   file: /mypath/myfile.log

   level:
     mypackage: INFO

谢谢

【问题讨论】:

【参考方案1】:

default file appender 基于大小 (10MB)。

在您的logback.xml 中只需配置TimeBasedRollingPolicy,如here 所述

即类似:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <include resource="org/springframework/boot/logging/logback/base.xml"/>

  <appender name="ROLLIN" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>$LOG_FILE</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

        <!-- daily rollover -->
        <fileNamePattern>$LOG_FILE.%dyyyy-MM-dd.log</fileNamePattern>

    </rollingPolicy>
  </appender>

  <root level="INFO">
    <appender-ref ref="ROLLIN" />
  </root>

  <logger name="org.springframework.web" level="INFO"/>
</configuration>

【讨论】:

感谢 Donovan,我想知道是否可以避免像 dropwizard 中那样使用 logback.xml,我可以在 config.yml 中定义它。即在日志记录下,我可以定义带有类型的附加程序:文件,currentLogFilename:/mypath/myfile.log,archiveLogFilenamePattern:/mypath/myfile-d%(yyyy-MM-dd.log.gz,archiveFileCount:3,时区:UTC。目前在 Spring Boot 中似乎是不可能的。 嗯,logging.config 可能值得 here 看看,但不确定... 遇到了同样的问题,所以@ele 是否意味着在 Spring Boot 中无法配置 appender 类型? @Amnon Logback 是 Spring Boot 中的默认日志实现,application.yml 中没有通用的配置方法,因此您必须在特定于实现的配置文件中进行配置。 @Donovan,我明白了。所以这应该在你的回答中明确说明。【参考方案2】:

要覆盖默认文件附加程序并将其更改为每日翻转,您可以使用如下所示的 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="ROLLING-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">
            <!-- daily rollover -->
            <fileNamePattern>$LOG_FILE.%dyyyy-MM-dd.log</fileNamePattern>
        </rollingPolicy>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="ROLLING-FILE"/>
    </root>

</configuration>

【讨论】:

对我来说它在删除 file 属性时有效,然后我指定道具 logging.file=path/fileName 我正在寻找这种配置,其中日志记录将在控制台和文件中。谢谢! 谁有yml文件的解决方案?我面临同样的问题:***.com/questions/43177232/… OP 询问 application.yml 而不是 logback.xml【参考方案3】:

来自link :-

logging:
  file: logs/application-debug.log
  pattern:
    console: "%d %-5level %logger : %msg%n"
    file: "%d %-5level [%thread] %logger : %msg%n"
  level:
    org.springframework.web: ERROR
    com.howtodoinjava: INFO
    org.hibernate: ERROR

【讨论】:

那不是 RollingFileAppender【参考方案4】:

您还可以根据文件大小配置滚动策略 logback-spring.xml。在下面,我们将SizeBasedTriggeringPolicy 的最大文件大小指定为 10MB:

<?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="ACTUAL_LOG_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">
                <!-- gz extension to enable file deletion by logrotator  -->
                <fileNamePattern>$LOG_FILE.%i.gz</fileNamePattern>
                 <minIndex>1</minIndex>
                <maxIndex>10</maxIndex>
            </rollingPolicy>
            <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy>
        </appender>

        <root level="INFO">
            <appender-ref ref="ACTUAL_LOG_FILE" />
        </root>

    </configuration>

【讨论】:

【参考方案5】:

聚会有点晚了...但我能够使用 application.yaml 中的以下配置(按大小)滚动日志文件,并且没有任何 logback.xml 配置:

logging:
    file: /var/log/webapps/app/app.log

    # Roll the log file when it reaches max size
    file.max-size: 1024KB

    # Limit the number of log files retained
    file.max-history: 50

    pattern:
        console: "%d %-5level %logger : %msg%n"
        file: "%d %-5level [%thread] %logger : %msg%n"

    level:
        root:                                           info
        my.package.of.app:                              debug
        org.springframework:                            error
        # etc. etc.

【讨论】:

【参考方案6】:
logging.file.name=MyApp.log
logging.pattern.rolling-file-name=MyApp-%dyyyy-MM-dd-HH-mm-ss.%i.log

使用 Spring Boot 2.3.42.2.10Not 使用 Spring Boot 2.1.17

【讨论】:

这工作得非常好,如果您希望每日日志使用 logging.pattern.rolling-file-name=MyApp-%dyyyy-MM-dd.%i.log,如果您想要每小时日志 logging.pattern.rolling-file-name=MyApp-%dyyyy-MM-dd-HH.%i.log 已弃用。 请参阅:logging.logback.rollingpolicy.file-name-pattern 翻转日志文件名的模式(默认为 $LOG_FILE.%dyyyy-MM-dd.%i.gz【参考方案7】:

在 application.properties 文件中添加这些代码行,根据您的要求使用任何这些代码

logging.file.name=myinfo.log
#daily rolling logs
logging.pattern.rolling-file-name=myinfo-%dyyyy-MM-dd.%i.log
#per hour rolling logs
logging.pattern.rolling-file-name=myinfo-%dyyyy-MM-dd-HH.%i.log
#per minute rolling logs
logging.pattern.rolling-file-name=myinfo-%dyyyy-MM-dd-HH-mm.%i.log
#per secs rolling logs
 logging.pattern.rolling-file-name=myinfo-%dyyyy-MM-dd-HH-mm-ss.%i.log

【讨论】:

以上是关于如何在 Spring Boot 的 application.yml 中配置滚动文件附加程序的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 属性配置

Spring Boot核心原理

继Spring-Boot Intro之后,“无法找到合适的主类,请添加'mainClass'属性”

spring boot 知识点

Spring Boot的配置文件

spring boot 基础 多环境配置