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

Red*_*ion 5 ruby logging

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

log = Logger.new("foo.log")
# program here logging things
log.close
Run Code Online (Sandbox Code Playgroud)

我以前从未关闭过它,这似乎不是问题,也许它会在程序完成时自动关闭?

Ale*_*kin 6

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

LoggerLogDevice可能是任何设备:一个文件,一个端口,插座,管道。一些设备被称为是罚款一并发访问,但其中大部分都没有。例如,如果您将套接字用作日志记录设备,则操作系统将阻止任何其他尝试写入此套接字的尝试。不建议同时写入文件,尽管通常可以这样做,因为那样会导致混乱。

除非您期望其他应用程序将访问同一设备进行写入,否则不要关闭该设备是安全的。在时它会自动关闭Logger被GC'ed。

另一方面,如果您正在写入共享文件,或者期望目标在程序运行期间可能被第三方使用,则在不需要该设备以允许其他人同时访问该设备时,关闭设备更安全。作家。

注意Logger#close实际上会关闭底层设备:

# File logger.rb, line 569
def close
  @logdev.close if @logdev
end
Run Code Online (Sandbox Code Playgroud)