Ruby - 确保 Syslog 被关闭

Posted

技术标签:

【中文标题】Ruby - 确保 Syslog 被关闭【英文标题】:Ruby - Ensure Syslog Gets Closed 【发布时间】:2008-09-21 18:46:01 【问题描述】:

在我使用完 Syslog 后总是关闭它是绝对重要的吗?不这样做会不会产生巨大的负面影响?

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

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

我没有立即看到应该调用Syslog.close 的位置,但您有什么建议?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

调用 'do_something' 方法会比打开 syslog 一次、根据需要使用它然后关闭它要昂贵得多吗?【参考方案2】:

看起来您将它作为类变量打开...所以正确的方法是...

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

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

虽然这不一定是可预测或支持的。如果您要按照自己的方式保留代码,这就是这样做的方式。

【讨论】:

以上是关于Ruby - 确保 Syslog 被关闭的主要内容,如果未能解决你的问题,请参考以下文章

Syslog-NG 两个中继服务器问题

服务器被当肉鸡排查过程(简写)

在 Ruby 中检查 UDP syslog 数据包

如何使用 Django 1.3 日志字典配置设置 SysLogHandler

Ruby - 确保只有一个类对象

mysql定义事件并查看事件是否执行