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

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

即文件名模式:myfile.%d{yyyy-MM-dd-HH-mm-ss}.log

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

logging:

   file: /mypath/myfile.log

   level:
     mypackage: INFO

谢谢

【问题讨论】:

    标签: spring logging spring-boot yaml


    【解决方案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}.%d{yyyy-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}.%d{yyyy-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文件的解决方案?我面临同样的问题:stackoverflow.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-%d{yyyy-MM-dd-HH-mm-ss}.%i.log
        

        使用 Spring Boot 2.3.42.2.10
        Not 使用 Spring Boot 2.1.17

        【讨论】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2022-01-04
          • 1970-01-01
          • 2016-06-07
          • 2018-12-30
          • 1970-01-01
          • 2017-05-24
          • 2019-07-17
          • 2017-02-03
          • 2018-03-24
          相关资源
          最近更新 更多