railsのログにタグづけしたい
設定
class Application < Rails::Application
...
require Rails.root.join("lib/tagged_logger.rb")
initializer "tagged_logger.insert_middleware" do |app|
app.config.middleware.use TaggedLogger::Middleware
end
end
# frozen_string_literal: true
module TaggedLogger
class Middleware
def initialize(app)
@app = app
end
def call(env)
request = ActionDispatch::Request.new(env)
request.session.send(:load!) unless request.session.loaded?
if (user_id = request.session[:user_id])
tag = "user_id=#{user_id}"
Rails.logger.tagged(tag) do
@app.call(env)
end
else
@app.call(env)
end
end
end
end
アウトプット
[user_id=1]
が今回付与したタグ
06:08:00 app.1 | Started GET "/api/v1/hoge" for 172.18.0.1 at 2020-02-10 06:08:00 +0000
06:08:00 app.1 | Cannot render console from 172.18.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
06:08:00 app.1 | [user_id=1] Began GET "/api/v1/hoge" for 172.18.0.1 at 2020-02-10 06:08:00 +0000