如何在 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.4
和 2.2.10
Not
使用 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 中配置滚动文件附加程序的主要内容,如果未能解决你的问题,请参考以下文章