gpt4 book ai didi

java - 每次java程序运行时如何使用logback回滚日志文件

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:01 27 4
gpt4 key购买 nike

我有一个小的 java 程序,它将作为 jar 文件在最终用户的桌面上运行。这个小程序有一个特定的任务要完成,它是作为一个简单的 java 程序运行的(不是 swing 或类似的东西)。

我想使用 logback 来捕获此程序的输出,并且我希望日志文件在程序每次运行时滚动。换句话说,程序第一次运行时,我想要生成一个名为 c:\temp\logFile.log 的日志文件。程序第二次运行时,我希望第一个日志文件重命名为 logFile.1.log 并创建一个新的 logFile.log。程序第三次运行时,我希望第一个日志文件重命名为logFile.2.log,第二个日志文件重命名为logFile.1.log,并创建一个新的logFile.log。我希望最多有 5 个归档文件。

到目前为止,我已经能够配置 logback 以根据文件大小滚动日志文件。我已经得到它来完全按照我想要的方式重命名日志文件并保留确切数量的文件。问题是我不希望日志文件根据文件大小滚动,我希望它在每次程序运行时滚动。我该怎么做呢?到目前为止,这是我在 logback.xml 文件中得到的内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>C:\temp\logFile.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>C:\temp\logFile.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>5</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5KB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="fileAppender" />
</root>
</configuration>

我知道 maxFileSize 触发策略导致我的日志文件根据文件大小滚动。我一直无法找到根据运行的程序滚动文件的触发策略。谁能帮帮我?

谢谢!

-斯蒂芬·斯伯丁

最佳答案

以下配置将创建一个新的日志文件(文件名上会有日期戳)和每次运行程序时的控制台输出,请注意它没有使用 RollingFileAppender。有关详细信息,请参阅 logback 文档 https://logback.qos.ch/manual/configuration.html

<configuration>
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logfile-${bySecond}.txt</file>
<append>true</append>
<encoder>
<Pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</encoder>
</appender>
<root level="info" additivity="false">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"></appender-ref>
</root>
</configuration>

关于java - 每次java程序运行时如何使用logback回滚日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25045887/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com