Skip to content

Commit 40ce36a

Browse files
authored
Merge pull request #303 from kares/integ-test-7.2
[feat] make logger in Rails include AS::LoggerSilence
2 parents 697a55c + 4ff7002 commit 40ce36a

File tree

5 files changed

+98
-11
lines changed

5 files changed

+98
-11
lines changed

src/main/ruby/jruby/rack/rails/railtie.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ class Railtie < ::Rails::Railtie
3737
log_formatter = config.log_formatter if config.respond_to?(:log_formatter)
3838
logger.formatter = log_formatter if log_formatter && logger.respond_to?(:formatter=)
3939
require 'active_support/tagged_logging' unless defined?(ActiveSupport::TaggedLogging)
40-
ActiveSupport::TaggedLogging.new(logger) # returns a logger.clone
40+
logger = ActiveSupport::TaggedLogging.new(logger) # returns a logger.clone
41+
logger.singleton_class.instance_eval do
42+
include ActiveSupport::LoggerSilence if defined?(ActiveSupport::LoggerSilence)
43+
end
44+
logger
4145
end
4246
end
4347

src/spec/ruby/jruby/rack/rails_booter_spec.rb

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -168,16 +168,17 @@
168168

169169
before(:all) do
170170
@active_support = defined? ::ActiveSupport
171-
@tagged_logging = active_support && ActiveSupport::TaggedLogging rescue false
171+
@active_support = ::ActiveSupport.constants if @active_support
172+
require 'active_support/logger'
172173
end
173174

174175
after(:all) do
175-
if @tagged_logging == false
176-
if @active_support
177-
ActiveSupport.send :remove_const, :TaggedLogging
178-
else
179-
Object.send :remove_const, :ActiveSupport rescue nil
176+
if @active_support
177+
[:Logger, :TaggedLogging, :LoggerSilence, :LoggerThreadSafeLevel].each do |name| # stubbed bits we might end up loading
178+
ActiveSupport.send :remove_const, name unless @active_support.include?(name)
180179
end
180+
else
181+
Object.send :remove_const, :ActiveSupport rescue nil
181182
end
182183
end
183184

@@ -195,7 +196,7 @@ def logger=(logger); @logger = logger; end
195196
log_initializer[1].should == [{:before => :initialize_logger}]
196197
end
197198

198-
it "gets set as config.logger (wrapped with tagged logging)" do
199+
it "gets set as config.logger (wrapped with tagged logging and logger_silence)" do
199200
logger = JRuby::Rack::Logger.new STDERR
200201
@config.stub(:log_level).and_return(:info)
201202
@config.stub(:log_formatter).and_return(nil)
@@ -206,6 +207,13 @@ def logger=(logger); @logger = logger; end
206207
rails_logger = @app.config.logger
207208
# ActiveSupport::TaggedLogging.new clones the original logger instance
208209
expect(rails_logger).to be_a(JRuby::Rack::Logger)
210+
expect(rails_logger).to be_a(ActiveSupport::TaggedLogging)
211+
if defined? ActiveSupport::LoggerSilence
212+
expect(rails_logger).to be_a(ActiveSupport::LoggerSilence)
213+
# sanity check silence works:
214+
value_returned = rails_logger.silence(Logger::WARN) { |logger| logger.class.name }
215+
expect(value_returned).to eql('JRuby::Rack::Logger')
216+
end
209217
end
210218

211219
it "has a configurable log level" do

src/spec/ruby/rails/stub/active_support/logger.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# frozen_string_literal: true
22

3-
# require "active_support/logger_silence"
4-
# require "active_support/logger_thread_safe_level"
3+
require "active_support/logger_silence"
4+
require "active_support/logger_thread_safe_level"
55
require "logger"
66

77
module ActiveSupport
88
class Logger < ::Logger
9-
# include LoggerSilence
9+
include LoggerSilence
1010

1111
# Returns true if the logger destination matches one of the sources
1212
#
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# frozen_string_literal: true
2+
3+
# require "active_support/concern"
4+
# require "active_support/core_ext/module/attribute_accessors"
5+
require "active_support/logger_thread_safe_level"
6+
7+
module ActiveSupport
8+
module LoggerSilence
9+
# extend ActiveSupport::Concern
10+
11+
def self.included(base)
12+
base.class_eval do
13+
# cattr_accessor :silencer, default: true
14+
@@silencer = true
15+
def self.silencer; @@silencer end
16+
def silencer; self.class.silencer end
17+
18+
include ActiveSupport::LoggerThreadSafeLevel
19+
end
20+
end
21+
22+
# Silences the logger for the duration of the block.
23+
def silence(severity = Logger::ERROR)
24+
silencer ? log_at(severity) { yield self } : yield(self)
25+
end
26+
end
27+
end
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# frozen_string_literal: true
2+
3+
# require "active_support/concern"
4+
require "logger"
5+
6+
module ActiveSupport
7+
module LoggerThreadSafeLevel # :nodoc:
8+
# extend ActiveSupport::Concern
9+
10+
def local_level
11+
# IsolatedExecutionState[local_level_key]
12+
end
13+
14+
def local_level=(level)
15+
case level
16+
when Integer
17+
when Symbol
18+
level = Logger::Severity.const_get(level.to_s.upcase)
19+
when nil
20+
else
21+
raise ArgumentError, "Invalid log level: #{level.inspect}"
22+
end
23+
# if level.nil?
24+
# IsolatedExecutionState.delete(local_level_key)
25+
# else
26+
# IsolatedExecutionState[local_level_key] = level
27+
# end
28+
level
29+
end
30+
31+
def level
32+
local_level || super
33+
end
34+
35+
# Change the thread-local level for the duration of the given block.
36+
def log_at(level)
37+
old_local_level, self.local_level = local_level, level
38+
yield
39+
ensure
40+
self.local_level = old_local_level
41+
end
42+
43+
private
44+
def local_level_key
45+
@local_level_key ||= :"logger_thread_safe_level_#{object_id}"
46+
end
47+
end
48+
end

0 commit comments

Comments
 (0)