Skip to content

Instantly share code, notes, and snippets.

@qrush
Created April 27, 2012 20:59
Show Gist options
  • Star 19 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save qrush/2513183 to your computer and use it in GitHub Desktop.
Save qrush/2513183 to your computer and use it in GitHub Desktop.
Rails 3.2 Tagged Logger examples
# 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
YourApp::Application.configure do
config.log_tags = ["Static"]
end
# [Static] Processing by ProjectsController#index as HTML
YourApp::Application.configure do
config.log_tags = [:uuid]
end
# [71ba53fd717c67a6677a058f4a5acdf4] Processing by ProjectsController#index as HTML
@mlangenberg
Copy link

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

@inspire22
Copy link

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

@danmayer
Copy link

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