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

标签 ruby logging

我刚刚阅读了 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/

相关文章:

javascript - 当 html 选择/选项更改时,需要更新输入字段

ruby - 使用 Nokogiri 计算 xml 中的元素

ruby - %x[] 捕获所有输出吗?

java - Log4j2:如果已存在,则记录到不同的文件

java - Storm : set log level for topology

encryption - 创建加密的日志文件

ruby - 如何忽略 Middleman Sitemap 中的页面

ruby - 使用 ruby​​ mechanize 捕获超时错误

java - 如何修改log4j中的map lookup

php - 禁用 Codeigniter 日志记录并允许原生 PHP 日志记录