rails-logginglisted
Install: claude install-skill mickzijdel/rails-toolkit
# Rails Logging and Observability
## 1. Lograge — structured one-line request logs
The default Rails request log is multi-line and noisy. Lograge collapses it to one structured
JSON line per request, suitable for log aggregators (Datadog, Loki, Splunk).
```ruby
# Gemfile
gem "lograge"
# config/initializers/lograge.rb
Rails.application.configure do
config.lograge.enabled = true
config.lograge.formatter = Lograge::Formatters::Json.new
config.lograge.custom_options = lambda do |event|
{
request_id: event.payload[:headers]["X-Request-Id"],
user_id: event.payload[:user_id],
account_id: event.payload[:account_id],
}.compact
end
end
```
Add user context from the controller:
```ruby
class ApplicationController < ActionController::Base
def append_info_to_payload(payload)
super
payload[:user_id] = current_user&.id
payload[:account_id] = current_account&.id
end
end
```
## 2. Tagged logging
Wrap every log line in a request with identifiers so you can grep a full request's story:
```ruby
# config/application.rb
config.log_tags = [:request_id]
# For custom tags (Rails 7.1+)
config.log_tags = [
:request_id,
->(req) { req.session[:account_id] },
]
```
In application code, use `Rails.logger.tagged` for sub-operations:
```ruby
Rails.logger.tagged("BatchImport", batch.id) do
batch.rows.each { |row| import_row(row) }
end
```
**Use Lograge OR tagged logging, not both** — Lograge replaces the multi-line format that
`log_ta