Skip to content

Commit f8f1084

Browse files
authoredSep 29, 2024··
Merge pull request #240 from y-yagi/allow_to_customize_log_message
Allow to customize a message of action log
2 parents 0c35abc + 5cfe0ac commit f8f1084

File tree

4 files changed

+75
-14
lines changed

4 files changed

+75
-14
lines changed
 

‎lib/rails_semantic_logger/action_controller/log_subscriber.rb

+14-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,13 @@ module ActionController
33
class LogSubscriber < ActiveSupport::LogSubscriber
44
INTERNAL_PARAMS = %w[controller action format _method only_path].freeze
55

6+
class << self
7+
attr_accessor :action_message_format
8+
end
9+
610
# Log as debug to hide Processing messages in production
711
def start_processing(event)
8-
controller_logger(event).debug { "Processing ##{event.payload[:action]}" }
12+
controller_logger(event).debug { action_message("Processing", event.payload) }
913
end
1014

1115
def process_action(event)
@@ -59,7 +63,7 @@ def process_action(event)
5963
payload.delete(:response)
6064

6165
{
62-
message: "Completed ##{payload[:action]}",
66+
message: action_message("Completed", event.payload),
6367
duration: event.duration,
6468
payload: payload
6569
}
@@ -122,6 +126,14 @@ def extract_path(path)
122126
index = path.index("?")
123127
index ? path[0, index] : path
124128
end
129+
130+
def action_message(message, payload)
131+
if self.class.action_message_format
132+
self.class.action_message_format.call(message, payload)
133+
else
134+
"#{message} ##{payload[:action]}"
135+
end
136+
end
125137
end
126138
end
127139
end

‎lib/rails_semantic_logger/engine.rb

+1
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ class Engine < ::Rails::Engine
226226
if defined?(::ActionController)
227227
require "action_controller/log_subscriber"
228228

229+
RailsSemanticLogger::ActionController::LogSubscriber.action_message_format = config.rails_semantic_logger.action_message_format
229230
RailsSemanticLogger.swap_subscriber(
230231
::ActionController::LogSubscriber,
231232
RailsSemanticLogger::ActionController::LogSubscriber,

‎lib/rails_semantic_logger/options.rb

+21-12
Original file line numberDiff line numberDiff line change
@@ -100,23 +100,32 @@ module RailsSemanticLogger
100100
# * named_tags: *DEPRECATED*
101101
# Instead, supply a Hash to config.log_tags
102102
# config.rails_semantic_logger.named_tags = nil
103+
#
104+
# * Change the message format of Action Controller action.
105+
# A block that will be called to format the message.
106+
# It is supplied with the `message` and `payload` and should return the formatted data.
107+
#
108+
# config.rails_semantic_logger.action_message_format = -> (message, payload) do
109+
# "#{message} - #{payload[:controller]}##{payload[:action]}"
110+
# end
103111
class Options
104112
attr_accessor :semantic, :started, :processing, :rendered, :ap_options, :add_file_appender,
105-
:quiet_assets, :format, :named_tags, :filter, :console_logger
113+
:quiet_assets, :format, :named_tags, :filter, :console_logger, :action_message_format
106114

107115
# Setup default values
108116
def initialize
109-
@semantic = true
110-
@started = false
111-
@processing = false
112-
@rendered = false
113-
@ap_options = {multiline: false}
114-
@add_file_appender = true
115-
@quiet_assets = false
116-
@format = :default
117-
@named_tags = nil
118-
@filter = nil
119-
@console_logger = true
117+
@semantic = true
118+
@started = false
119+
@processing = false
120+
@rendered = false
121+
@ap_options = {multiline: false}
122+
@add_file_appender = true
123+
@quiet_assets = false
124+
@format = :default
125+
@named_tags = nil
126+
@filter = nil
127+
@console_logger = true
128+
@action_message_format = nil
120129
end
121130
end
122131
end

‎test/controllers/articles_controller_test.rb

+39
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,45 @@ class ArticlesControllerTest < ActionDispatch::IntegrationTest
8383
}
8484
)
8585
end
86+
87+
it "customize action message" do
88+
old_action_message_format = RailsSemanticLogger::ActionController::LogSubscriber.action_message_format
89+
RailsSemanticLogger::ActionController::LogSubscriber.action_message_format = -> (message, payload) do
90+
"#{message} #{payload[:controller]}##{payload[:action]}"
91+
end
92+
93+
messages = semantic_logger_events do
94+
post articles_url(params: params)
95+
end
96+
assert_equal 5, messages.count, messages
97+
98+
assert_semantic_logger_event(
99+
messages[0],
100+
message: "Started"
101+
)
102+
103+
assert_semantic_logger_event(
104+
messages[1],
105+
message: "Processing ArticlesController#create"
106+
)
107+
108+
assert_semantic_logger_event(
109+
messages[2],
110+
message: "Rendering"
111+
)
112+
113+
assert_semantic_logger_event(
114+
messages[3],
115+
message: "Rendered"
116+
)
117+
118+
assert_semantic_logger_event(
119+
messages[4],
120+
message: "Completed ArticlesController#create",
121+
)
122+
ensure
123+
RailsSemanticLogger::ActionController::LogSubscriber.action_message_format = old_action_message_format
124+
end
86125
end
87126

88127
describe "#show" do

0 commit comments

Comments
 (0)
Please sign in to comment.