lac*_*ker 7 ruby logging exception-handling eventmachine
我有一个EventMachine服务器,我用monit监控.有时会崩溃,我想弄明白为什么,但我不清楚如何记录所有顶级故障.我试过这样的代码:
begin
EventMachine::run do
EventMachine::start_server('0.0.0.0', PORT, MyServer)
end
rescue Exception => e
puts "FAILURE: #{e.class}: #{e}"
end
Run Code Online (Sandbox Code Playgroud)
但这似乎没有发现错误.我怀疑这可能是内存耗尽,我正在单独跟踪,但我仍然希望这台服务器记录其可能的失败原因.
Eri*_*c G 15
如果您想要一个catch-all错误处理程序,请尝试EM.error_handler.来自文档的示例:
EM.error_handler{ |e|
puts "Error raised during event loop: #{e.message}"
}
Run Code Online (Sandbox Code Playgroud)
您可能还需要更细粒度的错误处理,在这种情况下,您可以使用errback机制(请参阅Deferrable).例如,您可以在您的reactor循环中:
EventMachine::run do
server = EventMachine::start_server('0.0.0.0', PORT, MyServer)
server.errback { # handle error thrown by server here }
end
Run Code Online (Sandbox Code Playgroud)
要使其工作,请include Deferrable
在MyServer中,然后每当您想要引发错误时,请致电fail
.