我正在编写一个Java Logging框架,用于将日志消息异步写入文件系统。为此我使用MemoryHandler,它最终使用FileHandler写入文件。我不想在记录后立即将日志消息写入文件,而是希望在缓冲区达到某个阈值时通过外部类推送刷新内存的所有内容。有人能指出一个很好的例子来编写这个外部类来显式调用MemoryHandler的push方法吗?提前谢谢。
答案 0 :(得分:0)
在添加要记录的消息的方法中(我们将其称为log(String msg)
),您可以启动一个要刷新的线程,如下所示:
public void log(String msg) {
buffer.append(msg);
if (buffer.length() > threshold) {
new Thread() {
public void run() {
flush();
}
}.start();
}
private void flush() {
// ...
}
这将使flush保持异步,并避免创建一个整个类来调用一个方法,更不用说需要公开flush了,你可能不想这样做。
编辑:或者,如果您已经设置了一个线程池,则可以创建一个新的Runnable,然后将其传递出去执行。但这个概念是一样的。