rails_semantic_logger 4.9.0 → 4.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0e8365956f97589f4c0a37048a4bd342e6b761b3a954f5d4cfd20178633aee5a
4
- data.tar.gz: f9fbd1af99f0a4357d17c76a871b0b474fe825e137c9f0871d3d56fe1a7f34bd
3
+ metadata.gz: 6944c99a390bc385a4d5a83daea0fc340dbd4dd2913631ae3a812590ec1503e4
4
+ data.tar.gz: ebb36106bde192de58b716077fc4c1b5c51d474ee9e86e5a93ef4a77fc25d1be
5
5
  SHA512:
6
- metadata.gz: b52c5f417d64195d36b0f8ebee40c67173dbefed6ab7a59bd399b345ae93f4d3231552adf215f6e4c4354b205a7e76a86604870ef6e4cbd97f165cd3dc43d5aa
7
- data.tar.gz: d069e457c98a43778d61c032f47cc57a93f6db8016118528e9b635fe16fff18c7f47c7e98749243f0f2e034189233af9ee60ca336d1aff9eb4572c2587f041ee
6
+ metadata.gz: 1e1cf6df574f6dd146029407d80d2a4b51e1bfb222dbf511dbc6b540070e8d7432cff0eaf4cf94227b2d5440eb21c2ebab7222db774dd9408ebda613ae0df3bf
7
+ data.tar.gz: 2da852f09a5417bc91e155f1bb80d9a1c50baa823cd39c46ee2ea7a9ecfa366f95b551c996a3a295d6074424224fd5aaf390c14c7f08b88effdcae31486d3bc4
data/README.md CHANGED
@@ -21,7 +21,7 @@ SemanticLogger::Processor.instance.instance_variable_set(:@queue, Queue.new)
21
21
 
22
22
  ## Supports
23
23
 
24
- For the complete list of supported Ruby and Rails versions, see the [Testing file](https://github.com/reidmorrison/rails_semantic_logger/blob/master/.travis.yml).
24
+ For the complete list of supported Ruby and Rails versions, see the [Testing file](https://github.com/reidmorrison/rails_semantic_logger/blob/master/.github/workflows/ci.yml).
25
25
 
26
26
  ## Author
27
27
 
@@ -0,0 +1,135 @@
1
+ require "active_support/log_subscriber"
2
+ require "action_mailer"
3
+
4
+ module RailsSemanticLogger
5
+ module ActionMailer
6
+ class LogSubscriber < ::ActiveSupport::LogSubscriber
7
+ def deliver(event)
8
+ ex = event.payload[:exception_object]
9
+ message_id = event.payload[:message_id]
10
+ duration = event.duration.round(1)
11
+ if ex
12
+ log_with_formatter event: event, log_duration: true, level: :error do |fmt|
13
+ {
14
+ message: "Error delivering mail #{message_id} (#{duration}ms)",
15
+ exception: ex
16
+ }
17
+ end
18
+ else
19
+ message = begin
20
+ if event.payload[:perform_deliveries]
21
+ "Delivered mail #{message_id} (#{duration}ms)"
22
+ else
23
+ "Skipped delivery of mail #{message_id} as `perform_deliveries` is false"
24
+ end
25
+ end
26
+ log_with_formatter event: event, log_duration: true do |fmt|
27
+ { message: message }
28
+ end
29
+ end
30
+ end
31
+
32
+ # An email was generated.
33
+ def process(event)
34
+ mailer = event.payload[:mailer]
35
+ action = event.payload[:action]
36
+ duration = event.duration.round(1)
37
+ log_with_formatter event: event do |fmt|
38
+ { message: "#{mailer}##{action}: processed outbound mail in #{duration}ms" }
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ class EventFormatter
45
+ def initialize(event:, log_duration: false)
46
+ @event = event
47
+ @log_duration = log_duration
48
+ end
49
+
50
+ def mailer
51
+ event.payload[:mailer]
52
+ end
53
+
54
+ def payload
55
+ {}.tap do |h|
56
+ h[:event_name] = event.name
57
+ h[:mailer] = mailer
58
+ h[:action] = action
59
+ h[:message_id] = event.payload[:message_id]
60
+ h[:perform_deliveries] = event.payload[:perform_deliveries]
61
+ h[:subject] = event.payload[:subject]
62
+ h[:to] = event.payload[:to]
63
+ h[:from] = event.payload[:from]
64
+ h[:bcc] = event.payload[:bcc]
65
+ h[:cc] = event.payload[:cc]
66
+ h[:date] = date
67
+ h[:duration] = event.duration.round(2) if log_duration?
68
+ h[:args] = formatted_args
69
+ end
70
+ end
71
+
72
+ def date
73
+ if event.payload[:date].respond_to?(:to_time)
74
+ event.payload[:date].to_time.utc
75
+ elsif event.payload[:date].is_a?(String)
76
+ Time.parse(date).utc
77
+ else
78
+ nil
79
+ end
80
+ end
81
+
82
+ private
83
+
84
+ attr_reader :event
85
+
86
+ def mailer
87
+ event.payload[:mailer]
88
+ end
89
+
90
+ def action
91
+ event.payload[:action]
92
+ end
93
+
94
+ def formatted_args
95
+ if defined?(mailer.contantize.log_arguments?) && !mailer.contantize.log_arguments?
96
+ ""
97
+ else
98
+ JSON.pretty_generate(event.payload[:args].map { |arg| format(arg) }) if event.payload[:args].present?
99
+ end
100
+ end
101
+
102
+ def format(arg)
103
+ case arg
104
+ when Hash
105
+ arg.transform_values { |value| format(value) }
106
+ when Array
107
+ arg.map { |value| format(value) }
108
+ when GlobalID::Identification
109
+ begin
110
+ arg.to_global_id
111
+ rescue StandardError
112
+ arg
113
+ end
114
+ else
115
+ arg
116
+ end
117
+ end
118
+
119
+ def log_duration?
120
+ @log_duration
121
+ end
122
+ end
123
+
124
+ def log_with_formatter(level: :info, **kw_args)
125
+ fmt = EventFormatter.new(**kw_args)
126
+ msg = yield fmt
127
+ logger.public_send(level, **msg, payload: fmt.payload)
128
+ end
129
+
130
+ def logger
131
+ ::ActionMailer::Base.logger
132
+ end
133
+ end
134
+ end
135
+ end
@@ -198,7 +198,8 @@ module RailsSemanticLogger
198
198
  alias bind_values bind_values_v5_0_3
199
199
  alias render_bind render_bind_v5_0_3
200
200
  alias type_casted_binds type_casted_binds_v5_0_3
201
- elsif Rails::VERSION::MAJOR == 6 && Rails::VERSION::MINOR > 0 # ~> 6.1.0
201
+ elsif (Rails::VERSION::MAJOR == 6 && Rails::VERSION::MINOR > 0) || # ~> 6.1.0
202
+ Rails::VERSION::MAJOR == 7
202
203
  alias bind_values bind_values_v6_1
203
204
  alias render_bind render_bind_v6_1
204
205
  alias type_casted_binds type_casted_binds_v5_1_5
@@ -1,6 +1,7 @@
1
1
  require "rails"
2
2
  require "action_controller/log_subscriber"
3
3
  require "action_view/log_subscriber"
4
+ require "action_mailer/log_subscriber"
4
5
  require "rails_semantic_logger/options"
5
6
 
6
7
  module RailsSemanticLogger
@@ -107,13 +108,13 @@ module RailsSemanticLogger
107
108
  Mongo::Logger.logger = SemanticLogger[Mongo] if defined?(Mongo::Logger)
108
109
 
109
110
  # Replace the Resque Logger
110
- Resque.logger = SemanticLogger[Resque] if defined?(Resque) && Resque.respond_to?(:logger)
111
+ Resque.logger = SemanticLogger[Resque] if defined?(Resque) && Resque.respond_to?(:logger=)
111
112
 
112
113
  # Replace the Sidekiq logger
113
- Sidekiq.logger = SemanticLogger[Sidekiq] if defined?(Sidekiq)
114
+ Sidekiq.logger = SemanticLogger[Sidekiq] if defined?(Sidekiq) && Sidekiq.respond_to?(:logger=)
114
115
 
115
116
  # Replace the Sidetiq logger
116
- Sidetiq.logger = SemanticLogger[Sidetiq] if defined?(Sidetiq)
117
+ Sidetiq.logger = SemanticLogger[Sidetiq] if defined?(Sidetiq) && Sidetiq.respond_to?(:logger=)
117
118
 
118
119
  # Replace the DelayedJob logger
119
120
  if defined?(Delayed::Worker)
@@ -198,6 +199,13 @@ module RailsSemanticLogger
198
199
  RailsSemanticLogger::ActionController::LogSubscriber,
199
200
  :action_controller
200
201
  )
202
+
203
+ # Action Mailer
204
+ RailsSemanticLogger.swap_subscriber(
205
+ ::ActionMailer::LogSubscriber,
206
+ RailsSemanticLogger::ActionMailer::LogSubscriber,
207
+ :action_mailer
208
+ )
201
209
  end
202
210
 
203
211
  #
@@ -5,11 +5,11 @@ module Rails
5
5
  class Server
6
6
  private
7
7
 
8
- undef_method :log_to_stdout
8
+ undef_method :log_to_stdout if method_defined?(:log_to_stdout)
9
9
  def log_to_stdout
10
10
  wrapped_app # touch the app so the logger is set up
11
11
 
12
- SemanticLogger.add_appender(io: $stdout, formatter: :color)
12
+ SemanticLogger.add_appender(io: $stdout, formatter: :color) unless SemanticLogger.appenders.console_output?
13
13
  end
14
14
  end
15
15
  end
@@ -1,3 +1,3 @@
1
1
  module RailsSemanticLogger
2
- VERSION = "4.9.0".freeze
2
+ VERSION = "4.11.0".freeze
3
3
  end
@@ -6,6 +6,9 @@ module RailsSemanticLogger
6
6
  module ActionController
7
7
  autoload :LogSubscriber, "rails_semantic_logger/action_controller/log_subscriber"
8
8
  end
9
+ module ActionMailer
10
+ autoload :LogSubscriber, "rails_semantic_logger/action_mailer/log_subscriber"
11
+ end
9
12
  module ActionView
10
13
  autoload :LogSubscriber, "rails_semantic_logger/action_view/log_subscriber"
11
14
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_semantic_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.9.0
4
+ version: 4.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reid Morrison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-28 00:00:00.000000000 Z
11
+ date: 2022-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -63,6 +63,7 @@ files:
63
63
  - Rakefile
64
64
  - lib/rails_semantic_logger.rb
65
65
  - lib/rails_semantic_logger/action_controller/log_subscriber.rb
66
+ - lib/rails_semantic_logger/action_mailer/log_subscriber.rb
66
67
  - lib/rails_semantic_logger/action_view/log_subscriber.rb
67
68
  - lib/rails_semantic_logger/active_job/log_subscriber.rb
68
69
  - lib/rails_semantic_logger/active_record/log_subscriber.rb
@@ -101,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
102
  - !ruby/object:Gem::Version
102
103
  version: '0'
103
104
  requirements: []
104
- rubygems_version: 3.0.9
105
+ rubygems_version: 3.1.6
105
106
  signing_key:
106
107
  specification_version: 4
107
108
  summary: Feature rich logging framework that replaces the Rails logger.