Ruby-确保系统日志已关闭

时间:2020-03-06 14:30:46  来源:igfitidea点击:

使用完毕后始终关闭Syslog是否绝对重要?不这样做会带来巨大的负面影响吗?

如果事实证明我确实需要这样做,那么有什么好方法呢?我在类构造函数中打开Syslog,但没有找到在Ruby中执行类析构函数的方法,目前有类似的东西:

class Foo
  def initialize
    @@log = Syslog.open("foo")
  end
end

我没有立即看到应该调用Syslog.close的位置,但是我们有何建议?

解决方案

open方法接受一个块。做这样的事情:

class Foo
  def do_something
    Syslog.open do
      # work with the syslog here
    end
  end
end

看来我们是将其作为类变量打开...所以正确的方法是...

class Foo
  def initialize
    @@log = Syslog.open("foo")
  end

  def Foo.finalize(id)
    @@log.close if @@log
  end
end

尽管这不一定是可预测的或者受支持的。如果我们要按照自己的方式保留代码,那么这就是这样做的方法。