gpt4 book ai didi

java - 优化大容量日志文件的 Java 文件 I/O

转载 作者:行者123 更新时间:2023-12-02 06:54:42 28 4
gpt4 key购买 nike

当我想编写用于将文本写入文件的 Java 代码时,它通常看起来像这样:

File logFile = new File("/home/someUser/app.log");
FileWriter writer;

try {
writer = new FileWriter(logFile, true);

writer.write("Some text.");

writer.close();
} catch (IOException e) {
e.printStackTrace();
}

我现在正在编写一个Logger,它将被内部报告工具广泛使用。由于本问题上下文之外的原因,我无法使用传统的日志记录框架之一(SLF4J、Log4j、Logback、JUL、JCL 等)。所以我必须自己做一些东西。

这个日志系统将是简单的、不可配置的,但必须能够处理大容量(可能每秒数百个日志操作,或更多)。

所以我问:如何优化上面的普通文件 I/O 模板,以处理高吞吐量日志记录?我可以在这里利用哪些“Java 文件 I/O 的隐藏瑰宝”?几乎任何事情都会发生,除了,就像我说的,使用其他日志框架。基本的 Logger API 需要类似于:

public class Logger {
private File logFile;

public Logger(File logFile) {
super();

setFile(logFile);
}

public void log(String message) {
???
}
}

提前致谢!

更新:如果我的 Logger 使用 ByteOutputStream 而不是 FileWriter,那么我如何正确同步我的 log(String) : void 方法?

public class Logger {
private File logFile;

// Constructor, getters/setters, etc.

public void synchronized log(String message) {
FileOutputStream foutStream = new FileOutputStream(logFile);
ByteOutputStream boutStream = new BytesOutputStream(foutStream);

boutStream.write(message.getBytes(Charset.forName("utf-8")));

// etc.
}
}

最佳答案

如果您想实现日志记录操作的最大吞吐量,您应该使用队列和单独的日志写入线程将消息日志记录与将消息写入文件系统分离。

关于java - 优化大容量日志文件的 Java 文件 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17518489/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com