3
3
require_relative "abstract_unit"
4
4
require "active_support/log_subscriber/test_helper"
5
5
6
- class MyLogSubscriber < ActiveSupport ::LogSubscriber
7
- attr_reader :event
6
+ class SyncLogSubscriberTest < ActiveSupport ::TestCase
7
+ include ActiveSupport :: LogSubscriber :: TestHelper
8
8
9
- def some_event ( event )
10
- @event = event
11
- info event . name
12
- end
9
+ class MyLogSubscriber < ActiveSupport ::LogSubscriber
10
+ attr_reader :event
13
11
14
- def foo ( event )
15
- debug "debug"
16
- info { "info" }
17
- warn "warn"
18
- end
12
+ def some_event ( event )
13
+ @event = event
14
+ info event . name
15
+ end
19
16
20
- def bar ( event )
21
- info "#{ color ( "cool" , :red ) } , #{ color ( "isn't it?" , :blue , bold : true ) } "
22
- end
17
+ def foo ( event )
18
+ debug "debug"
19
+ info { "info" }
20
+ warn "warn"
21
+ end
23
22
24
- def baz ( event )
25
- info "#{ color ( "rad " , :green , bold : true , underline : true ) } , #{ color ( "isn't it?" , :yellow , italic : true ) } "
26
- end
23
+ def bar ( event )
24
+ info "#{ color ( "cool " , :red ) } , #{ color ( "isn't it?" , :blue , bold : true ) } "
25
+ end
27
26
28
- def deprecated ( event )
29
- info "#{ color ( "bogus " , :red , true ) } "
30
- end
27
+ def baz ( event )
28
+ info "#{ color ( "rad " , :green , bold : true , underline : true ) } , #{ color ( "isn't it?" , :yellow , italic : true ) } "
29
+ end
31
30
32
- def puke ( event )
33
- raise "puke"
34
- end
35
- end
31
+ def deprecated ( event )
32
+ info "#{ color ( "bogus" , :red , true ) } "
33
+ end
36
34
37
- class SyncLogSubscriberTest < ActiveSupport ::TestCase
38
- include ActiveSupport ::LogSubscriber ::TestHelper
35
+ def puke ( event )
36
+ raise "puke"
37
+ end
38
+
39
+ def debug_only ( event )
40
+ debug "debug logs are enabled"
41
+ end
42
+ subscribe_log_level :debug_only , :debug
43
+ end
39
44
40
45
def setup
41
46
super
@@ -47,10 +52,6 @@ def teardown
47
52
ActiveSupport ::LogSubscriber . log_subscribers . clear
48
53
end
49
54
50
- def instrument ( *args , &block )
51
- ActiveSupport ::Notifications . instrument ( *args , &block )
52
- end
53
-
54
55
def test_proxies_method_to_rails_logger
55
56
@log_subscriber . foo ( nil )
56
57
assert_equal %w( debug ) , @logger . logged ( :debug )
@@ -165,4 +166,51 @@ def test_logging_does_not_die_on_failures
165
166
assert_equal 1 , @logger . logged ( :error ) . size
166
167
assert_match 'Could not log "puke.my_log_subscriber" event. RuntimeError: puke' , @logger . logged ( :error ) . last
167
168
end
169
+
170
+ def test_subscribe_log_level
171
+ MyLogSubscriber . logger = @logger
172
+ @logger . level = Logger ::INFO
173
+ MyLogSubscriber . attach_to :my_log_subscriber , @log_subscriber
174
+ assert_empty @logger . logged ( :debug )
175
+
176
+ instrument "debug_only.my_log_subscriber"
177
+ wait
178
+ assert_empty @logger . logged ( :debug )
179
+
180
+ @logger . level = Logger ::DEBUG
181
+ instrument "debug_only.my_log_subscriber"
182
+ wait
183
+ assert_not_empty @logger . logged ( :debug )
184
+ end
185
+
186
+ class MockSemanticLogger < MockLogger
187
+ LEVELS = [ :debug , :info ]
188
+ def level
189
+ LEVELS [ super ]
190
+ end
191
+ end
192
+
193
+ def test_subscribe_log_level_with_non_numeric_levels
194
+ # The semantic_logger gem doesn't returns integers but symbols as levels
195
+ @logger = MockSemanticLogger . new
196
+ set_logger ( @logger )
197
+ MyLogSubscriber . logger = @logger
198
+ @logger . level = Logger ::INFO
199
+ MyLogSubscriber . attach_to :my_log_subscriber , @log_subscriber
200
+ assert_empty @logger . logged ( :debug )
201
+
202
+ instrument "debug_only.my_log_subscriber"
203
+ wait
204
+ assert_empty @logger . logged ( :debug )
205
+
206
+ @logger . level = Logger ::DEBUG
207
+ instrument "debug_only.my_log_subscriber"
208
+ wait
209
+ assert_not_empty @logger . logged ( :debug )
210
+ end
211
+
212
+ private
213
+ def instrument ( *args , &block )
214
+ ActiveSupport ::Notifications . instrument ( *args , &block )
215
+ end
168
216
end
0 commit comments