滚动日志文件并删除旧的日志文件

use*_*755 19 java webservices-client

我正在开发一个基于Java SOAP的webservice应用程序,我将stdout写入文本文件作为日志供我们参考.该文件正在大量增长,因此我需要检查文件的大小...例如,如果文件大小超过10 Mb,我必须创建另一个文件.

像这样,我必须创建10个文件,一个接一个地旋转直到十个文件.达到十个文件后,我必须删除起始文件并重新开始创建...

如何在no之后删除文件.文件将变为10?

Rob*_*t H 23

我使用logback来做到这一点.以下示例是基于时间的滚动策略.根据您在日志期间输出的数据量,这可能对您有用.

另外,作为奖励,我的配置文件将日志扔到HTML中,以便于查看希望查看日志文件的管理类型.

配置文件的相关部分:

 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs\logFile.html</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- daily rollover -- >
        <fileNamePattern>logs\logFile.%d{yyyy-MM-dd}.%i.html</fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <!-- or whenever the file size reaches 10MB -- >
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
        <!-- keep 10 days' worth of history -- >
        <maxHistory>10</maxHistory>
    </rollingPolicy>

    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <charset>UTF-8</charset>
        <layout class="ch.qos.logback.classic.html.HTMLLayout">
            <pattern>%d{HH:mm:ss.SSS}%thread%level%logger%line%msg</pattern>
        </layout>           
    </encoder>
</appender> 

<root level="DEBUG">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
</root>
Run Code Online (Sandbox Code Playgroud)

相关的Maven依赖:

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.0.12</version>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.12</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)


VGR*_*VGR 11

我看到很多答案告诉你使用Log4J,但你可以使用Java自己的记录器来完成这个,只需创建一个FileHandler:

Handler handler =
    new FileHandler("%h/MyService-%g.log", 10 * 1024 * 1024, 10);
handler.setLevel(Level.ALL);
Logger.getLogger("").addHandler(handler);
Run Code Online (Sandbox Code Playgroud)


RAS*_*RAS 5

在log4j.xml中,您可以尝试以下操作:

<appender name="fileappender" class="org.apache.log4j.RollingFileAppender">
      <param name="file" value="applog.log"/>
      <param name="Append" value="true" />
      <param name="MaxBackupIndex" value="10"/>

      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/>
      </layout>
   </appender>
Run Code Online (Sandbox Code Playgroud)

该值告诉log4j.xml仅保留10个旋转的日志文件。

或者,如果您使用的是属性文件(而不是xml)

log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.File=applog.log
log4j.appender.File.Append=true
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n
log4j.appender.[appenderName].MaxBackupIndex = 10
Run Code Online (Sandbox Code Playgroud)


Fil*_*eca 2

大多数日志记录框架都能提供您正在寻找的内容。在 logback 中,您应该能够通过正确配置 RollingFileAppender 来实现它:

RollingFileAppender 通过滚动更新日志文件的功能扩展了 FileAppender。例如,RollingFileAppender 可以记录到名为 log.txt 的文件,并且一旦满足特定条件,将其记录目标更改为另一个文件。

RollingPolicy 负责涉及文件移动和重命名的翻转过程。

http://logback.qos.ch/manual/appenders.html