Skip to content

Commit f308ad2

Browse files
committed
"disable" (when possible) real logger's formatting when a (Ruby) formatter is set
1 parent e3f9a15 commit f308ad2

File tree

2 files changed

+86
-1
lines changed

2 files changed

+86
-1
lines changed

src/main/java/org/jruby/rack/ext/Logger.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ public IRubyObject allocate(Ruby runtime, RubyClass klass) {
8181
private int level = NOT_SET;
8282

8383
private RackLogger logger; // the "real" logger
84+
//private Boolean loggerFormatting;
8485
private IRubyObject formatter = null; // optional
8586
private IRubyObject progname;
8687

@@ -212,6 +213,18 @@ public IRubyObject get_formatter(final ThreadContext context) {
212213

213214
@JRubyMethod(name = "formatter=")
214215
public IRubyObject set_formatter(final ThreadContext context, final IRubyObject formatter) {
216+
if ( logger instanceof RackLogger.Base ) {
217+
final RackLogger.Base logger = (RackLogger.Base) this.logger;
218+
//if ( loggerFormatting == null ) loggerFormatting = logger.isFormatting();
219+
if ( formatter.isNil() ) {
220+
//if ( loggerFormatting != null && loggerFormatting.booleanValue() ) {
221+
logger.setFormatting(true);
222+
//}
223+
}
224+
else { // if formatter set disable 'potential' logger formatting
225+
logger.setFormatting(false);
226+
}
227+
}
215228
return this.formatter = formatter;
216229
}
217230

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

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,88 @@
1919
org.jruby.rack.servlet.DefaultServletRackContext.new(rack_config)
2020
end
2121

22+
let(:level) { org.jruby.rack.RackLogger::Level }
23+
24+
let(:logger) { JRuby::Rack::Logger.new real_logger }
25+
2226
before { JRuby::Rack.context = rack_context }
2327
after { JRuby::Rack.context = nil }
2428

2529
it 'works with a servlet context' do
26-
logger = JRuby::Rack::Logger.new real_logger
2730
logger.debug?
2831
logger.debug 'hogy basza meg a zold tucsok!'
2932
expect( real_logger.logged_content ).to match /^DEBUG.*hogy .* a zold tucsok!$/
3033
end
3134

35+
it 'delegates to passed logger instance' do
36+
logger.debug 'debugging'
37+
expect( real_logger.logged_content ).to match /^DEBUG.*debugging$/
38+
real_logger.reset
39+
logger.info 'infooo'
40+
expect( real_logger.logged_content ).to match /^INFO.*infooo$/
41+
real_logger.reset
42+
logger.warn 'warning'
43+
expect( real_logger.logged_content ).to match /^WARN.*warning$/
44+
real_logger.reset
45+
logger.error 'errored'
46+
expect( real_logger.logged_content ).to match /^ERROR.*errored$/
47+
real_logger.reset
48+
logger.fatal 'totaal!'
49+
expect( real_logger.logged_content ).to match /^FATAL.*totaal!$/
50+
end
51+
52+
it 'uses JRuby::Rack.context when no initialize argument' do
53+
logger = JRuby::Rack::Logger.new
54+
logger.debug?
55+
logger.debug 'hogy basza meg a zold tucsok!'
56+
expect( logger.real_logger ).to be rack_context
57+
end
58+
59+
it 'delegates level check (when level is not set)' do
60+
real_logger.level = level::INFO
61+
expect( logger.debug? ).to be false
62+
expect( logger.info? ).to be true
63+
real_logger.level = level::WARN
64+
expect( logger.info? ).to be false
65+
end
66+
67+
it 'uses level check when level is explicitly set' do
68+
real_logger.level = level::INFO
69+
logger.level = 2 # Logger.::WARN
70+
expect( logger.info? ).to be false
71+
expect( logger.warn? ).to be true
72+
logger.level = nil
73+
expect( logger.info? ).to be true
74+
end
75+
76+
it "combines level check with delegate's level" do
77+
real_logger.level = level::WARN
78+
logger.level = 1 # Logger.::INFO
79+
expect( logger.debug? ).to be false
80+
expect( logger.info? ).to be false
81+
expect( logger.warn? ).to be true
82+
logger.level = nil
83+
expect( logger.info? ).to be false
84+
expect( logger.debug? ).to be false
85+
expect( logger.warn? ).to be true
86+
end
87+
88+
it "disables real logger's formatting when formatter is set" do
89+
real_logger.formatting = true
90+
expect( real_logger.formatting? ).to be true
91+
92+
logger.formatter = Proc.new { |severity, timestamp, progname, msg| "#{severity[0, 1]} #{msg}" }
93+
logger.warn 'hogy basza meg a zold tucsok!'
94+
expect( real_logger.logged_content ).to eql "W hogy basza meg a zold tucsok!\n"
95+
96+
expect( real_logger.formatting? ).to be false
97+
end
98+
99+
# it 'handles constant resolution (for Rails compatibility)' do
100+
# expect( logger.class::DEBUG ).to eql 0
101+
# expect( logger.class::FATAL ).to eql 4
102+
# end
103+
32104
describe JRuby::Rack::ServletLog do
33105

34106
it "writes messages to the servlet context" do

0 commit comments

Comments
 (0)