Skip to content

Commit 9ea80cd

Browse files
committed
support full unwrap of RackLogger implementation
1 parent e593d43 commit 9ea80cd

File tree

4 files changed

+17
-5
lines changed

4 files changed

+17
-5
lines changed

src/main/java/org/jruby/rack/RackLogger.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,8 @@ public void setLevel(Level level) { /* noop */ }
4747
public boolean isFormatting() { return false; }
4848
public void setFormatting(boolean flag) { /* noop */ }
4949
}
50+
51+
interface DelegatingLogger extends RackLogger {
52+
RackLogger unwrapLogger();
53+
}
5054
}

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ public IRubyObject initialize_copy(final ThreadContext context, final IRubyObjec
123123

124124
@JRubyMethod
125125
public IRubyObject real_logger(final ThreadContext context) {
126+
RackLogger logger = this.logger;
127+
if (logger instanceof RackLogger.DelegatingLogger) {
128+
logger = ((RackLogger.DelegatingLogger) logger).unwrapLogger();
129+
}
126130
return JavaEmbedUtils.javaToRuby(context.runtime, logger);
127131
}
128132

@@ -357,8 +361,7 @@ public IRubyObject add(final ThreadContext context, final IRubyObject severity,
357361
return context.runtime.newBoolean( add(UNKNOWN, context, msg, block) );
358362
}
359363

360-
private boolean add(final int severity, final ThreadContext context,
361-
IRubyObject msg, final Block block) {
364+
private boolean add(final int severity, final ThreadContext context, IRubyObject msg, final Block block) {
362365
// severity ||= UNKNOWN
363366
final RackLogger.Level loggerLevel = mapLevel(severity);
364367

@@ -455,7 +458,7 @@ private static int toInt(final IRubyObject level) {
455458
@SuppressWarnings("unchecked")
456459
@Override
457460
public <T> T toJava(Class<T> target) {
458-
if ( RackLogger.class == target ) return (T) logger;
461+
if ( RackLogger.class.isAssignableFrom(target) && target.isInstance(logger) ) return (T) logger;
459462
return super.toJava(target);
460463
}
461464

src/main/java/org/jruby/rack/servlet/DefaultServletRackContext.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
*
3636
* @author nicksieger
3737
*/
38-
public class DefaultServletRackContext implements ServletRackContext {
38+
public class DefaultServletRackContext implements ServletRackContext, RackLogger.DelegatingLogger {
3939

4040
private final RackConfig config;
4141
private final ServletContext context;
@@ -232,6 +232,11 @@ public void log(Level level, CharSequence message, Throwable e) {
232232
logger.log(level, message, e);
233233
}
234234

235+
@Override
236+
public RackLogger unwrapLogger() {
237+
return logger;
238+
}
239+
235240
@Override
236241
public int getEffectiveMajorVersion() throws UnsupportedOperationException {
237242
return context.getEffectiveMajorVersion();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
logger = JRuby::Rack::Logger.new
5555
logger.debug?
5656
logger.debug 'hogy basza meg a zold tucsok!'
57-
expect( logger.real_logger ).to be rack_context
57+
expect( logger.to_java(org.jruby.rack.RackLogger) ).to be rack_context
5858
end
5959

6060
it 'delegates level check (when level is not set)' do

0 commit comments

Comments
 (0)