@@ -10,126 +10,6 @@ module Logging
10
10
def tag_logger ( *tags , &block )
11
11
logger . tagged ( *tags , &block )
12
12
end
13
-
14
- class LogSubscriber < ActiveSupport ::LogSubscriber
15
- def enqueue ( event )
16
- log_with_formatter event : event do |fmt |
17
- "Enqueued #{ fmt . job_info } "
18
- end
19
- end
20
-
21
- def enqueue_at ( event )
22
- log_with_formatter event : event do |fmt |
23
- "Enqueued #{ fmt . job_info } at #{ fmt . scheduled_at } "
24
- end
25
- end
26
-
27
- def perform_start ( event )
28
- log_with_formatter event : event do |fmt |
29
- "Performing #{ fmt . job_info } "
30
- end
31
- end
32
-
33
- def perform ( event )
34
- ex = event . payload [ :exception_object ]
35
- if ex
36
- logger . error ex
37
- else
38
- log_with_formatter event : event , log_duration : true do |fmt |
39
- "Performed #{ fmt . job_info } in #{ event . duration . round ( 2 ) } ms"
40
- end
41
- end
42
- end
43
-
44
- private
45
-
46
- class EventFormatter
47
- def initialize ( event :, log_duration : false )
48
- @event = event
49
- @log_duration = log_duration
50
- end
51
-
52
- def job_info
53
- "#{ job . class . name } (Job ID: #{ job . job_id } ) to #{ queue_name } "
54
- end
55
-
56
- def payload
57
- { } . tap do |h |
58
- h [ :event_name ] = event . name
59
- h [ :adapter ] = adapter_name
60
- h [ :queue ] = job . queue_name
61
- h [ :job_class ] = job . class . name
62
- h [ :job_id ] = job . job_id
63
- h [ :provider_job_id ] = job . try ( :provider_job_id ) # Not available in Rails 4.2
64
- h [ :duration ] = event . duration . round ( 2 ) if log_duration?
65
- h [ :arguments ] = formatted_args
66
- end
67
- end
68
-
69
- def queue_name
70
- adapter_name + "(#{ job . queue_name } )"
71
- end
72
-
73
- def scheduled_at
74
- Time . at ( event . payload [ :job ] . scheduled_at ) . utc
75
- end
76
-
77
- private
78
-
79
- attr_reader :event
80
-
81
- def job
82
- event . payload [ :job ]
83
- end
84
-
85
- def adapter_name
86
- event . payload [ :adapter ] . class . name . demodulize . remove ( 'Adapter' )
87
- end
88
-
89
- def formatted_args
90
- JSON . pretty_generate ( job . arguments . map { |arg | format ( arg ) } )
91
- end
92
-
93
- def format ( arg )
94
- case arg
95
- when Hash
96
- arg . transform_values { |value | format ( value ) }
97
- when Array
98
- arg . map { |value | format ( value ) }
99
- when GlobalID ::Identification
100
- begin
101
- arg . to_global_id
102
- rescue StandardError
103
- arg
104
- end
105
- else
106
- arg
107
- end
108
- end
109
-
110
- def log_duration?
111
- @log_duration
112
- end
113
- end
114
-
115
- def log_with_formatter ( **kw_args )
116
- fmt = EventFormatter . new ( **kw_args )
117
- msg = yield fmt
118
- logger . info msg , fmt . payload
119
- end
120
-
121
- def logger
122
- ActiveJob ::Base . logger
123
- end
124
- end
125
13
end
126
14
end
127
15
128
- if defined? ( ActiveSupport ::Notifications )
129
- ActiveSupport ::Notifications . unsubscribe ( 'perform_start.active_job' )
130
- ActiveSupport ::Notifications . unsubscribe ( 'perform.active_job' )
131
- ActiveSupport ::Notifications . unsubscribe ( 'enqueue_at.active_job' )
132
- ActiveSupport ::Notifications . unsubscribe ( 'enqueue.active_job' )
133
-
134
- ActiveJob ::Logging ::LogSubscriber . attach_to :active_job
135
- end
0 commit comments