2009-02-05 32 views
1

我创建类似于这样的服务:在类中保存一个BufferedWriter实例。任何问题?

interface MyLogger 
{ 
    void logStuff(int id, String message); 
} 

实施基本打开一个文件,并在类缓存的BufferedWriter 的一个实例。该方法是同步的。

可以通过BufferedWriter以长时间的方式打开文件包装吗?

logStuff的简单实现。

public void logStuff(...) 
{ 
    try 
    { 
     this.writer.write(message); 
     this.writer.flush(); 
    } 
    catch(IOException ignored) {} 
} 
+0

这是正确的,我认为log4j也为每条消息创建编写器对象,然后关闭是相当昂贵的操作。 – 2009-02-05 03:46:07

回答

2

是的,这很好,你只需要知道其他进程/线程可能无法打开日志文件写,而您的服务已打开。我认为其他进程仍然可以以只读方式打开它,但我不知道这是否依赖于系统。

如果其他线程/进程需要能够写入与服务写入混合的文件,则可以执行诸如在MyLogger实例中缓存日志行的操作;那么一旦你有,比如100,以追加模式打开文件,写出来,并关闭文件。不过,这并不是一件特别优雅的事情。

相关问题