Ruby - Assurez-vous que Syslog est fermé
Question
Est-il absolument essentiel de toujours fermer Syslog lorsque je l'utilise? Y a-t-il un impact négatif considérable en ne le faisant pas?
S'il s'avère que j'en ai absolument besoin, quel est le bon moyen de le faire? J'ouvre Syslog dans le constructeur de ma classe et je ne vois pas comment faire des destructeurs de classe dans Ruby, et j'ai actuellement quelque chose qui ressemble à ceci:
class Foo
def initialize
@@log = Syslog.open("foo")
end
end
Je ne vois pas immédiatement l'endroit où devrait figurer l'appel Syslog.close
, mais que recommandez-vous?
La solution
La méthode open accepte un bloc. Faites quelque chose comme ça:
class Foo
def do_something
Syslog.open do
# work with the syslog here
end
end
end
Autres conseils
On dirait que vous l'ouvrez en tant que variable de classe ... la bonne façon de procéder serait donc de le faire ...
class Foo
def initialize
@@log = Syslog.open("foo")
end
def Foo.finalize(id)
@@log.close if @@log
end
end
Bien que cela ne soit pas nécessairement prévisible ou pris en charge. C'est le moyen de le faire si vous voulez conserver le code comme vous le faites.