繁体   English   中英

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

[英]How to use logback to roll log files everytime java program runs

我有一个小的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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM