Created

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

Rails 3.2 Tagged Logger examples

View proc.rb
1 2 3 4 5 6 7 8 9 10 11 12
# somewhere in your middleware stack...
# request.env['yourapp.someid'] = "1337"
 
YourApp::Application.configure do
config.log_tags = [
-> request {
request.env['yourapp.someid']
}
]
end
 
# [1337] Processing by ProjectsController#index as HTML
View proc.rb
1 2 3 4 5
YourApp::Application.configure do
config.log_tags = ["Static"]
end
 
# [Static] Processing by ProjectsController#index as HTML
View proc.rb
1 2 3 4 5
YourApp::Application.configure do
config.log_tags = [:uuid]
end
 
# [71ba53fd717c67a6677a058f4a5acdf4] Processing by ProjectsController#index as HTML

What about logging some information from the current session? I was trying to do the following. config.log_tags = [ lambda { |request| request.session[:user_id] }], but at this point request.session always seems to be an empty hash.

Does this imply that the 'session middleware' isn't called yet at this stage?

Owner
qrush commented

Might be. You could always stuff that in the rack env in another middleware.

Could you give me an example for that? Because I don't fully understand it.
When the request.session is still {} at this point: https://github.com/rails/rails/blob/master/railties/lib/rails/rack/logger.rb#L32, how would another middleware be able to add something from the session to the rack env before that?

Only other option I can think of is to write a middleware like this. (which is called after the logger)

class UserLogger
  def initialize(app)
    @app = app
  end

  def call(env)
    Rails.logger.tagged( env['rack.session']['user_id'] ) { @app.call(env) }
  end
end

Did you ever get this figured out? I was also hoping to add my userid from the session to my rails logs.

If you haven't checked it out, I found this was looking for various ways of inserting request_id and user_id, I ended up moving our app to lograge and using some custom event data. Look at the section on "You can also add a hook for own custom data"

https://github.com/roidrage/lograge

basically the flow for any variables is below

#in app config
config.lograge.custom_options = lambda do |event|
    {:name => "value", :user_id => event.payload[:user_id]}
  end

then set the custom var in application_controller.rb

  def append_info_to_payload(payload)
    super

    payload[:user] = current_user.try(:id)
  end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.