【发布时间】:2015-10-14 20:09:51
【问题描述】:
我正在追加一个简单的日志文件,其中每一行都是一个条目。不幸的是,在关闭时,通常会出现部分写入的行。代码如下所示:
private val out = java.nio.file.Files.newBufferedWriter(
java.nio.file.Paths.get(file),
java.nio.charset.StandardCharsets.UTF_8,
java.nio.file.StandardOpenOption.APPEND,
java.nio.file.StandardOpenOption.CREATE)
def write(s: String) = synchronized {
out.write(s)
out.newLine()
out.flush()
}
(对不起 Scala。)
我不明白为什么文件中有部分行。我相信的默认缓冲区大小是 8 kB。条目更短(
我无法重现部分行 - 问题发生在客户端。但我几乎可以肯定他们只是向进程发送 SIGTERM 以将其关闭。
SLF4J/LogBack/Log4j 写入的日志文件永远不会有部分行。我究竟做错了什么?我查看了 Apache Commons IO,希望找到一个有保证的基于行的 Writer,但没有。
【问题讨论】: