我应该关闭记录器文件吗?

时间:2018-01-02 14:56:25

标签: ruby logging

我刚刚阅读了Logger gem文档,方法close引起了我的注意。现在我想知道在使用它之后是否必须关闭logger文件,例如:

log = Logger.new("foo.log")
# program here logging things
log.close

我之前从未关闭它,它似乎不是一个问题,也许它会在程序结束时自动关闭?

1 个答案:

答案 0 :(得分:3)

TL; DR:除非您确定应该知道,否则不应该这样做。

LoggerLogDevice可能是任何设备:文件,端口,套接字,管道。已知某些设备可以并发访问,但大多数设备都没有。例如。如果您有一个套接字作为日志记录设备,操作系统将阻止任何其他写入此套接字的尝试。不建议同时写入文件,尽管可能是一般的,因为你最终会有一个混乱的块。

除非您希望某些其他应用程序访问同一设备进行写入,否则您无法关闭设备。当Logger为GC时,它会自动关闭。

另一方面,如果您正在写入共享文件,或者期望在程序处于活动状态期间第三方可能使用该目标,则一旦不需要它就可以关闭设备以允许并发访问该设备更安全对于其他作家。

NB Logger#close实际上关闭了底层设备:

# File logger.rb, line 569
def close
  @logdev.close if @logdev
end