Skip to content

Commit 9173fbb

Browse files
committed
Support named_tags in Rails Rack logger.
1 parent 46b2058 commit 9173fbb

File tree

5 files changed

+52
-7
lines changed

5 files changed

+52
-7
lines changed

lib/rails_semantic_logger/engine.rb

+18
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,20 @@ class Engine < ::Rails::Engine
5656
# Silence asset logging
5757
config.rails_semantic_logger.quiet_assets = false
5858

59+
# Hash of named tags.
60+
# Use in a similar fashion to the Rails config.log_tags, except that it is now a hash.
61+
#
62+
# Example:
63+
# config.rails_semantic_logger.named_tags = {
64+
# request_id: :request_id,
65+
# ip: :remote_ip,
66+
# user: -> request { request.cookie_jar['login'] }
67+
# }
68+
#
69+
# Notes:
70+
# - Nil Values are ignored and will be left out of the named tags.
71+
config.rails_semantic_logger.named_tags = nil
72+
5973
# Initialize SemanticLogger. In a Rails environment it will automatically
6074
# insert itself above the configured rails logger to add support for its
6175
# additional features
@@ -194,6 +208,10 @@ class Engine < ::Rails::Engine
194208
if config.rails_semantic_logger.processing
195209
require('rails_semantic_logger/extensions/action_controller/log_subscriber_processing') if defined?(ActionView::LogSubscriber)
196210
end
211+
212+
if config.rails_semantic_logger.named_tags && defined?(Rails::Rack::Logger)
213+
Rails::Rack::Logger.named_tags = config.rails_semantic_logger.named_tags
214+
end
197215
end
198216

199217
# Before any initializers run, but after the gems have been loaded

lib/rails_semantic_logger/extensions/rails/rack/logger.rb

+29-2
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,20 @@
44
module Rails
55
module Rack
66
class Logger
7-
@@logger = SemanticLogger['Rack']
7+
mattr_accessor :named_tags
8+
9+
@logger = SemanticLogger['Rack']
810

911
def self.logger
10-
@@logger
12+
@logger
13+
end
14+
15+
def call(env)
16+
request = ActionDispatch::Request.new(env)
17+
18+
proc = -> { call_app(request, env) }
19+
proc = -> { logger.tagged(compute_tags(request), &proc) } if @taggers && !@taggers.empty?
20+
named_tags ? SemanticLogger.named_tagged(compute_named_tags(request), &proc) : proc.call
1121
end
1222

1323
def started_request_message(request)
@@ -27,6 +37,23 @@ def logger
2737
self.class.logger
2838
end
2939

40+
def compute_named_tags(request) # :doc:
41+
tagged = {}
42+
named_tags.each_pair do |tag, value|
43+
resolved =
44+
case value
45+
when Proc
46+
value.call(request)
47+
when Symbol
48+
request.send(value)
49+
else
50+
value
51+
end
52+
tagged[tag] = resolved unless resolved.nil?
53+
end
54+
tagged
55+
end
56+
3057
end
3158
end
3259
end

lib/rails_semantic_logger/extensions/rails/rack/logger_info_as_debug.rb

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ module Rails
55
module Rack
66
class Logger
77
def self.logger
8-
@@logger
8+
@logger
99
end
1010

1111
private
@@ -23,8 +23,8 @@ def logger
2323
self.class.logger
2424
end
2525

26-
@@logger = SemanticLogger['Rack']
27-
@@logger.extend(LogInfoAsDebug)
26+
@logger = SemanticLogger['Rack']
27+
@logger.extend(LogInfoAsDebug)
2828
end
2929
end
3030
end

lib/rails_semantic_logger/version.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module RailsSemanticLogger #:nodoc
2-
VERSION = '4.0.1'
2+
VERSION = '4.1.0'
33
end

rails_semantic_logger.gemspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@ Gem::Specification.new do |spec|
1818
spec.has_rdoc = true
1919
spec.required_ruby_version = '>= 2.1'
2020
spec.add_dependency 'rails', '>= 4.0'
21-
spec.add_dependency 'semantic_logger', '~> 4.0'
21+
spec.add_dependency 'semantic_logger', '~> 4.1'
2222
end

0 commit comments

Comments
 (0)