Ruby - Garanta que o syslog seja fechado
Pergunta
É absolutamente crítico que eu sempre feche o syslog quando terminei de usá -lo? Existe um enorme impacto negativo por não fazê -lo?
Se eu definitivamente preciso, qual é uma boa maneira de fazer isso? Estou abrindo syslog no meu construtor de classe e não vejo uma maneira de fazer destruidores de classe em Ruby, e atualmente tenho algo parecido com isso:
class Foo
def initialize
@@log = Syslog.open("foo")
end
end
Eu não vejo imediatamente o lugar onde o Syslog.close
A chamada deve ser, mas o que você recomenda?
Solução
O método aberto aceita um bloco. Faça algo assim:
class Foo
def do_something
Syslog.open do
# work with the syslog here
end
end
end
Outras dicas
Parece que você está abrindo como uma variável de classe ... então a maneira correta seria fazer ...
class Foo
def initialize
@@log = Syslog.open("foo")
end
def Foo.finalize(id)
@@log.close if @@log
end
end
Embora isso não seja necessariamente previsível ou suportado. É a maneira de fazer isso se você manter o código da maneira que você faz.