我正在开发一个基于 Java SOAP 的 Web 服务应用程序,我正在将标准输出写入文本文件作为日志以供我们参考。该文件正在大幅增长,所以我需要检查文件的大小......例如,如果文件大小超过 10 Mb,我必须创建另一个文件。
像这样,我必须创建 10 个文件,一个接一个地旋转直到十个文件。达到十个文件后,我必须删除起始文件并重新开始创建......
没有后如何删除文件。的文件将变为 10?
我正在开发一个基于 Java SOAP 的 Web 服务应用程序,我正在将标准输出写入文本文件作为日志以供我们参考。该文件正在大幅增长,所以我需要检查文件的大小......例如,如果文件大小超过 10 Mb,我必须创建另一个文件。
像这样,我必须创建 10 个文件,一个接一个地旋转直到十个文件。达到十个文件后,我必须删除起始文件并重新开始创建......
没有后如何删除文件。的文件将变为 10?
我使用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>
相关的 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>
我看到很多答案告诉您使用 Log4J,但是您可以使用 Java 自己的记录器通过简单地创建FileHandler来做到这一点:
Handler handler =
new FileHandler("%h/MyService-%g.log", 10 * 1024 * 1024, 10);
handler.setLevel(Level.ALL);
Logger.getLogger("").addHandler(handler);
在 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>
该值告诉 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
如果您使用java.util.logging.Logger
,您可以使用FileHandler
.
来源: kodejava
package org.kodejava.example.logging;
import java.util.logging.Logger;
import java.util.logging.FileHandler;
import java.util.logging.SimpleFormatter;
import java.io.IOException;
public class RollingLogFile {
//
// Set a small log file size to demonstrate the rolling log files.
//
public static final int FILE_SIZE = 1024;
public static void main(String[] args) {
Logger logger = Logger.getLogger(RollingLogFile.class.getName());
try {
//
// Creating an instance of FileHandler with 5 logging files
// sequences.
//
FileHandler handler = new FileHandler("myapp.log", FILE_SIZE, 5, true);
handler.setFormatter(new SimpleFormatter());
logger.addHandler(handler);
logger.setUseParentHandlers(false);
} catch (IOException e) {
logger.warning("Failed to initialize logger handler.");
}
logger.info("Logging information message.");
logger.warning("Logging warning message.");
}
}
大多数日志记录框架提供您正在寻找的内容。在 logback 中,您应该能够通过正确配置 RollingFileAppender 来实现它:
RollingFileAppender 扩展了 FileAppender 具有翻转日志文件的能力。例如,RollingFileAppender 可以记录到一个名为 log.txt 的文件,一旦满足某个条件,就可以将其记录目标更改为另一个文件。
和
RollingPolicy 负责涉及文件移动和重命名的翻转过程。
Log4j可以做到这一点。特别是RollingFileAppender类。