Skip to content

Instantly share code, notes, and snippets.

@lucasmazza
Last active August 31, 2017 02:25
Show Gist options
  • Save lucasmazza/5020390 to your computer and use it in GitHub Desktop.
Save lucasmazza/5020390 to your computer and use it in GitHub Desktop.

Devise / Warden Tagged logging

# Add this to your application config.
config.app_middleware.insert_after("Warden::Manager", "Devise::TaggedLogging")
module Devise
class TaggedLogging
def initialize(app)
@app = app
end
def call(env)
if logger.respond_to?(:tagged)
logger.tagged(compute_devise_tags(env)) { @app.call(env) }
else
@app.call(env)
end
end
private
def compute_devise_tags(env)
warden = env['warden']
Devise.mappings.keys.map do |scope|
if record = warden.user(:scope => scope)
["current #{scope}", record.to_key].join(": ")
end
end.compact
end
def logger
Rails.logger
end
end
end
module Devise
class TaggedLogging
def initialize(app)
@app = app
end
def call(env)
if logger.respond_to?(:tagged)
logger.tagged(compute_devise_tags(env)) { @app.call(env) }
else
@app.call(env)
end
end
private
def compute_devise_tags(env)
serializer = Warden::SessionSerializer.new(env)
Devise.mappings.keys.map do |scope|
key = serializer.key_for(scope)
if session_data = serializer.session[key]
["current #{scope}", session_data[1]].join(": ")
end
end.compact
end
def logger
Rails.logger
end
end
end
@sedx
Copy link

sedx commented Sep 22, 2015

Awesome! Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment