我正在为我的程序编写一个单独的记录器,我想知道每次登录时打开和关闭它是否更好,或者在创建单例时打开流并关闭它终止该计划?如果我这样做,我会在终止时关闭它吗?
答案 0 :(得分:1)
不要关闭它,只需刷新,这是Log4j FileAppender默认执行的操作。
答案 1 :(得分:1)
一次打开文件的主要优势是效果。你可以节省每次调用open
的惩罚,并寻找文件末尾的附加内容;如果文件很大(有些日志往往是),这会变得更糟。
缺点是:
如果作者中有一些缓冲(延迟写入),您可能无法立即读取最后一个日志行。但是,每次写入后都可以通过刷新来修复(你可能会失去一些性能,但这通常不相关)。
您不能同时写入来自不同进程的同一日志。但是你可能不需要这个 - 如果你需要它,开放式解决方案仍然需要处理并发性。
某些外部日志处理(通常是日志轮换并重命名)会出现问题。为此,您可能需要实现一些关闭并重新打开文件的信令。
通常,优势超过缺点,因此一般规则是保持日志文件处于打开状态。但这取决于情景。
(正如其他答案所指出的那样,通常你更喜欢使用一些标准的日志记录库而不是自己实现它。但尝试一下,或者至少考虑所涉及的所有问题是有益的)。
答案 2 :(得分:0)
你应该打开一次(并关闭一次)。如果你什么都不做,Java会为你关闭它。您可能更愿意明确覆盖Object.finalize()。