首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >滚动日志文件和删除旧的日志文件

滚动日志文件和删除旧的日志文件
EN

Stack Overflow用户
提问于 2013-05-13 20:42:06
回答 6查看 42K关注 0票数 21

我正在开发一个基于Java SOAP的our服务应用程序,其中我将stdout写成一个文本文件作为日志供我们参考。这个文件是巨大的增长,所以我需要检查文件的大小...例如,如果文件大小超过10Mb,我必须创建另一个文件。

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

如何删除编号后的文件?%的文件将变为10?

EN

回答 6

Stack Overflow用户

发布于 2013-05-13 20:59:02

我使用logback来做这件事。下面的示例是基于时间的滚动策略。根据您在日志期间输出的数据量,这可能适用于您的实际情况。

此外,作为额外的好处,我的配置文件将日志放入HTML中,以便于想要查看日志文件的管理类型进行查看。

配置文件的相关部分:

代码语言:javascript
运行
复制
 <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>

相关的Maven依赖项:

代码语言:javascript
运行
复制
    <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>
票数 26
EN

Stack Overflow用户

发布于 2013-05-13 22:05:55

我看到很多答案都建议您使用Log4J,但是您可以通过简单地创建一个FileHandler来使用Java自己的记录器来实现这一点

代码语言:javascript
运行
复制
Handler handler =
    new FileHandler("%h/MyService-%g.log", 10 * 1024 * 1024, 10);
handler.setLevel(Level.ALL);
Logger.getLogger("").addHandler(handler);
票数 13
EN

Stack Overflow用户

发布于 2013-05-15 19:32:08

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

代码语言:javascript
运行
复制
<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>

该值告诉log4j.xml只保留10个循环的日志文件。

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

代码语言:javascript
运行
复制
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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16522339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档