有类似于滚动输出流的东西吗?

3

是否有一个简单的Java OutputStream可以模仿类似于log4j RollingFileAppender的功能?基本上,它会写入一个最大大小的文件,然后将其重命名,开始一个新文件等。在从头开始编写之前,我想问一下。


1
log4j是开源的。你能够适应他们已经写好的代码吗? - Jonathon Faust
我研究了一下,但是Rolling文件附加器与流完全不同,并且有许多其他代码部分的依赖关系。不过我可能能够提取一些想法。 - EddyYosso
3个回答

0

纯Java中没有这样的东西。一旦你打开了文件句柄,它就是打开状态 - 你需要自己关闭它 :)


0

我没有见过类似的东西,但你可能可以通过子类化Apache Commons IO ThreadholdingOutputStream来实现它。


好主意,这样可以在将流切换到新文件时将缓冲区保留在内存中。谢谢,我会尝试的。 - EddyYosso

0

rotating-fos提供了一个RotatingFileOutputStream。它的使用非常简单:

RotationConfig config = RotationConfig
        .builder()
        .file("/tmp/app.log")
        .filePattern("/tmp/app-%d{yyyyMMdd-HHmmss.SSS}.log")
        .policy(new SizeBasedRotationPolicy(5000 /* 5s */, 1024 * 1024 * 100 /* 100MB */))
        .policy(DailyRotationPolicy.getInstance())
        .build();

try (RotatingFileOutputStream stream = new RotatingFileOutputStream(config)) {
    stream.writer("Hello, world!".getBytes(StandardCharsets.UTF_8))
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接