我刚刚阅读了 Logger gem 文档和方法 close引起了我的注意。现在我想知道是否必须在使用后关闭记录器文件,例如:
log = Logger.new("foo.log")
# program here logging things
log.close
我以前从来没有关闭过它,这似乎不是问题,也许它在程序完成时自动关闭了?
最佳答案
TL;DR:除非您确定应该这样做,否则您不应该这样做。
Logger
有一个 LogDevice
这可能是任何设备:文件、端口、套接字、管道。已知某些设备可以并发访问,但大多数设备都不是。例如。如果你有一个套接字作为日志记录设备,任何其他试图写入这个套接字的尝试都会被操作系统阻止。并发写入文件,虽然通常是可能的,但不建议,因为你最终会在那里有一个困惑的 block 。
除非您预计某些其他应用程序将访问同一设备进行写入,否则不要关闭该设备是安全的。当 Logger
被 GC 时,它会自动关闭。
另一方面,如果您正在写入共享文件,或者预计目标可能会在您的程序运行期间被第 3 方使用,那么在不需要设备以允许并发访问时关闭设备会更安全对于其他作家。
注意:Logger#close
实际上关闭了底层设备:
# File logger.rb, line 569
def close
@logdev.close if @logdev
end
关于ruby - 我应该关闭记录器文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48063138/