Last active
August 29, 2015 14:06
-
-
Save gretel/388f14f1de38174ea790 to your computer and use it in GitHub Desktop.
tiny Rack middleware to have Yell::Logger log exceptions nicely.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# tom@jitter.eu https://gist.github.com/gretel/388f14f1de38174ea790 09/2014 MIT License | |
# Rack middleware to Yell (https://github.com/rudionrails/yell) exceptions | |
# config.ru: | |
# require 'yell_exceptions' | |
# use Rack::YellExceptions | |
require 'yell' | |
module Rack | |
class YellExceptions | |
attr_accessor :str | |
def initialize(app, log = nil, str = nil) | |
@app = app | |
log ||= yeller | |
fail unless log.kind_of? Yell::Logger | |
@logger = log | |
str ||= "%s\n%s\n%s" | |
@str = str | |
end | |
def call(env) | |
begin | |
response = @app.call(env) | |
rescue Object => e | |
except(e, env) | |
raise | |
end | |
response | |
end | |
private | |
def except(e, env = nil) | |
@logger.fatal(sprintf(@str, e, e.backtrace.join("\n"), env.to_a[0].to_s)) # todo: test | |
end | |
def yeller | |
return Object.logger if Object.logger.kind_of? Yell::Logger | |
Yell.new :stdout, name: self.class | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment