我正在研究一个基于Java SOAP的web服务应用程序,我将stdout写入文本文件作为日志供我们参考。该文件正在大幅增长,所以我需要检查文件的大小......例如,如果文件大小超过10 Mb,我必须创建另一个文件。滚动日志文件和删除旧的日志文件
像这样,我必须创建10个文件,一个接一个地旋转,直到10个文件。达到10个文件后,我必须删除开始文件并重新开始创建...
如何删除文件后的否。的文件将成为10?
我正在研究一个基于Java SOAP的web服务应用程序,我将stdout写入文本文件作为日志供我们参考。该文件正在大幅增长,所以我需要检查文件的大小......例如,如果文件大小超过10 Mb,我必须创建另一个文件。滚动日志文件和删除旧的日志文件
像这样,我必须创建10个文件,一个接一个地旋转,直到10个文件。达到10个文件后,我必须删除开始文件并重新开始创建...
如何删除文件后的否。的文件将成为10?
大多数日志记录框架都提供了您要查找的内容。 在的logback你应该能够通过适当配置RollingFileAppender进行实现它:
RollingFileAppender进行扩展FileAppender有能力侧翻日志文件。例如,RollingFileAppender可以登录到名为log.txt文件的文件,并且一旦满足某个条件,就将其日志目标更改为另一个文件。
和
RollingPolicy负责涉及文件移动和重命名的翻车过程。
我有没有日志文件中创建河段后删除文件到10 – user2377755 2013-05-13 13:14:45
,我必须为此编写java代码...我是新的webservices和java所以请帮助我 – user2377755 2013-05-13 13:15:25
我用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可以做到这一点。具体是RollingFileAppender类。
我看到了很多的答案告诉你使用Log4J的,但你可以通过简单地创建使用Java自身的记录器做这FileHandler:
Handler handler =
new FileHandler("%h/MyService-%g.log", 10 * 1024 * 1024, 10);
handler.setLevel(Level.ALL);
Logger.getLogger("").addHandler(handler);
感谢敌人的答案....但我想删除旧的文件....后达到10个文件......这种情况可以由文件处理程序处理.....请回复我....我从过去一周做这项工作...如果可能expalin与代码 – user2377755 2013-05-15 09:35:46
我还没有尝试过,但是我对FileHandler文档的理解是“旋转文件集”意味着一遍又一遍地使用相同的文件。意思是,一旦MyService-9.log达到其大小限制,记录器会截断并覆盖MyService-0.log(假设FileHandler的构造计数为10)。因此,文件本身并不会被删除,但永远不会有比count参数中指定的数量更多的文件。 – VGR 2013-05-15 10:58:10
是的,我只是测试了一下,看看它确实取代了旧的日志,谢谢。 – Anonsage 2016-07-03 02:20:16
在的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
我按照你写的那样加上了MaxBackupIndex,但在org.apache.log4j.rolling.RollingFileAppender中得到了“log4j:WARN没有这样的属性[maxBackupIndex]”。 – Karussell 2015-09-11 18:54:09
啊,它看起来像我使用RollingFileAppender从log4j演员中没有这...看到http://stackoverflow.com/questions/23945373/log4j-extras-maxbackupindex-or-similar – Karussell 2015-09-11 19:07:59
的属性文件,如果使用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.");
}
}
是否有可能使用logging.properties文件做到这一点? – Yogesh 2018-02-22 05:02:46
看看'Log4j',它会为你做的一切,一旦你设置它“正确” – Bill 2013-05-13 12:44:08