Skip to content

[feat] re-invent RackLogger w CharSequence message #306

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/main/java/org/jruby/rack/AbstractRackDispatcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public void process(RackEnvironment request, RackResponseEnvironment response)
}
}

@SuppressWarnings("deprecation")
protected void handleException(
final Exception e,
final RackEnvironment request,
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/jruby/rack/DefaultErrorApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ public void respond(RackResponseEnvironment response) {
}

private void log(RackLogger.Level level, String message, Throwable e) {
if ( context != null ) context.log(level, message, e);
if ( context != null ) context.log(level, (CharSequence) message, e);
}

}
Expand Down
14 changes: 2 additions & 12 deletions src/main/java/org/jruby/rack/RackApplicationFactoryDecorator.java
Original file line number Diff line number Diff line change
Expand Up @@ -169,12 +169,7 @@ protected RackConfig getConfig() {
* @param level the logger level
* @param message the log message
*/
protected void log(final RackLogger.Level level, final String message) {
getContextBang().log(level, message);
}

@Deprecated
protected void log(final String level, final String message) {
protected void log(final RackLogger.Level level, final CharSequence message) {
getContextBang().log(level, message);
}

Expand All @@ -184,12 +179,7 @@ protected void log(final String level, final String message) {
* @param message the log message
* @param e the exception raised
*/
protected void log(final RackLogger.Level level, final String message, Exception e) {
getContextBang().log(level, message, e);
}

@Deprecated
protected void log(final String level, final String message, Exception e) {
protected void log(final RackLogger.Level level, final CharSequence message, Exception e) {
getContextBang().log(level, message, e);
}

Expand Down
1 change: 0 additions & 1 deletion src/main/java/org/jruby/rack/RackContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,4 @@
public interface RackContext extends RackLogger {
RackConfig getConfig(); /// NOTE: deprecate ?
String getServerInfo();
// TODO more methods from ServletContext here ?!
}
19 changes: 11 additions & 8 deletions src/main/java/org/jruby/rack/RackLogger.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,23 +18,26 @@ enum Level {

boolean isEnabled(final Level level) ;

void log(Level level, String message) ;
void log(Level level, String message, Throwable ex) ;
void log(Level level, CharSequence message) ;

default void log(String message) {
void log(Level level, CharSequence message, Throwable ex) ;

default void log(CharSequence message) {
log(Level.INFO, message);
}

default void log(String message, Throwable ex) {
default void log(CharSequence message, Throwable ex) {
log(Level.ERROR, message, ex);
}

default void log(String level, String message) {
log(Level.valueOf(level), message);
@Deprecated
default void log(Level level, String message) {
log(level, (CharSequence) message);
}

default void log(String level, String message, Throwable ex) {
log(Level.valueOf(level), message, ex);
@Deprecated
default void log(Level level, String message, Throwable ex) {
log(level, (CharSequence) message, ex);
}

abstract class Base implements RackLogger {
Expand Down
3 changes: 1 addition & 2 deletions src/main/java/org/jruby/rack/RackServletContextListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import org.jruby.rack.servlet.ServletRackContext;

import static org.jruby.rack.DefaultRackConfig.isThrowInitException;
import static org.jruby.rack.RackLogger.Level.*;

/**
* Web application lifecycle listener.
Expand Down Expand Up @@ -100,7 +99,7 @@ protected void handleInitializationException(
throw RackInitializationException.wrap(e);
}
// NOTE: factory should have already logged the error ...
rackContext.log(ERROR, "initialization failed", e);
rackContext.log("initialization failed", e);
}

}
26 changes: 8 additions & 18 deletions src/main/java/org/jruby/rack/embed/Context.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,58 +69,48 @@ public void setLevel(Level level) {
}

@Override
public void log(String message) {
public void log(CharSequence message) {
logger.log(message);
}

@Override
public void log(String message, Throwable ex) {
public void log(CharSequence message, Throwable ex) {
logger.log(message, ex);
}

@Override
public void log(Level level, String message) {
public void log(Level level, CharSequence message) {
if ( isEnabled(level) ) logger.log(level, message);
}

@Override
public void log(Level level, String message, Throwable ex) {
public void log(Level level, CharSequence message, Throwable ex) {
if ( isEnabled(level) ) logger.log(level, message, ex);
}

@Override @Deprecated
public void log(String level, String message) {
log(Level.valueOf(level), message);
}

@Override @Deprecated
public void log(String level, String message, Throwable ex) {
log(Level.valueOf(level), message, ex);
}

@Override
public boolean isEnabled(Level level) {
if ( level == null || this.level == null ) return true;
return this.level.ordinal() <= level.ordinal();
}



private class DefaultLogger extends RackLogger.Base {

@Override
public void log(Level level, String message) {
public void log(Level level, CharSequence message) {
final PrintStream out = config.getOut();
out.print(level); out.print(": ");
printMessage(out, message);
out.flush();
}

@Override
public void log(Level level, String message, Throwable ex) {
public void log(Level level, CharSequence message, Throwable ex) {
final PrintStream err = config.getErr();
err.print(level); err.print(": ");
printMessage(err, message);
ex.printStackTrace(err);
err.flush();
}

@Override
Expand Down
15 changes: 6 additions & 9 deletions src/main/java/org/jruby/rack/ext/Logger.java
Original file line number Diff line number Diff line change
Expand Up @@ -388,11 +388,11 @@ private boolean add(final int severity, final ThreadContext context,
else if ( msg instanceof RubyException ) { // print backtrace for error
final RubyException error = (RubyException) msg;
error.prepareIntegratedBacktrace(context, null);
doLog( loggerLevel, ExceptionUtils.formatError(error).toString() );
doLog( loggerLevel, ExceptionUtils.formatError(error) );
return true;
}
// @logdev.write(format_message(format_severity(severity), Time.now, progname, message))
if ( ! msg.isNil() ) doLog( loggerLevel, msg.asString() ); // TODO CharSequence ?!
if ( ! msg.isNil() ) doLog( loggerLevel, msg.asString() );
return true;
}

Expand All @@ -403,7 +403,8 @@ else if ( msg instanceof RubyException ) { // print backtrace for error
@JRubyMethod(name = "<<")
public IRubyObject append(final ThreadContext context, final IRubyObject msg) {
final RubyString msgString = msg.asString();
doLog(msgString); return msgString.rubyLength(context);
doLog(msgString);
return msgString.rubyLength(context);
}

// private
Expand Down Expand Up @@ -462,16 +463,12 @@ public <T> T toJava(Class<T> target) {
return super.toJava(target);
}

private void doLog(RackLogger.Level level, String message) {
private void doLog(RackLogger.Level level, CharSequence message) {
logger.log( level, message );
}

private void doLog(RackLogger.Level level, RubyString message) {
logger.log( level, message.toString() );
}

private void doLog(RubyString message) {
logger.log( message.toString() );
logger.log( message );
}

// LoggerSilence API :
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public boolean isEnabled(Level level) {
}

@Override
public void log(Level level, String message) {
public void log(Level level, CharSequence message) {
if ( level == null ) { logger.info(message); return; }
switch ( level ) {
case DEBUG: logger.debug(message); break;
Expand All @@ -58,7 +58,7 @@ public void log(Level level, String message) {
}

@Override
public void log(Level level, String message, Throwable ex) {
public void log(Level level, CharSequence message, Throwable ex) {
if ( level == null ) { logger.error(message, ex); return; }
switch ( level ) {
case DEBUG: logger.debug(message, ex); break;
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/org/jruby/rack/logging/JulLogger.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,13 @@ public boolean isEnabled(Level level) {
}

@Override
public void log(Level level, String message) {
logger.log( mapLevel(level, java.util.logging.Level.INFO), message );
public void log(Level level, CharSequence message) {
logger.log( mapLevel(level, java.util.logging.Level.INFO), message.toString() );
}

@Override
public void log(Level level, String message, Throwable e) {
logger.log( mapLevel(level, java.util.logging.Level.SEVERE), message, e );
public void log(Level level, CharSequence message, Throwable e) {
logger.log( mapLevel(level, java.util.logging.Level.SEVERE), message.toString(), e );
}

private static java.util.logging.Level mapLevel(
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/org/jruby/rack/logging/OutputStreamLogger.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,17 +60,17 @@ public void setLevel(Level level) {
}

@Override
public void log(String message) {
public void log(CharSequence message) {
doLog(message);
}

@Override
public void log(String message, Throwable ex) {
public void log(CharSequence message, Throwable ex) {
doLog(message, ex);
}

@Override
public void log(Level level, String message) {
public void log(Level level, CharSequence message) {
if ( ! isEnabled(level) ) return;
printLevel(this, level, out);
doLog(message);
Expand All @@ -82,13 +82,13 @@ private void doLog(final CharSequence message) {
}

@Override
public void log(Level level, String message, Throwable ex) {
public void log(Level level, CharSequence message, Throwable ex) {
if ( ! isEnabled(level) ) return;
printLevel(this, level, out);
doLog(message, ex);
}

private void doLog(final String message, final Throwable ex) {
private void doLog(final CharSequence message, final Throwable ex) {
printMessage(out, message);
ex.printStackTrace(out);
out.flush();
Expand Down
16 changes: 8 additions & 8 deletions src/main/java/org/jruby/rack/logging/ServletContextLogger.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,23 +20,23 @@ public ServletContextLogger(ServletContext context) {
}

@Override
public void log(String message) {
context.log(message);
public void log(CharSequence message) {
context.log(message.toString());
}

@Override
public void log(String message, Throwable ex) {
context.log(message, ex);
public void log(CharSequence message, Throwable ex) {
context.log(message.toString(), ex);
}

@Override
public void log(Level level, String message) {
if ( isEnabled(level) ) context.log(message);
public void log(Level level, CharSequence message) {
if ( isEnabled(level) ) context.log(message.toString());
}

@Override
public void log(Level level, String message, Throwable ex) {
if ( isEnabled(level) ) context.log(message, ex);
public void log(Level level, CharSequence message, Throwable ex) {
if ( isEnabled(level) ) context.log(message.toString(), ex);
}

@Override
Expand Down
28 changes: 14 additions & 14 deletions src/main/java/org/jruby/rack/logging/Slf4jLogger.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,26 +50,26 @@ public boolean isEnabled(Level level) {
}

@Override
public void log(Level level, String message) {
if ( level == null ) { logger.info(message); return; }
public void log(Level level, CharSequence message) {
if ( level == null ) { logger.info(message.toString()); return; }
switch ( level ) {
case DEBUG: logger.debug(message); break;
case INFO: logger.info(message); break;
case WARN: logger.warn(message); break;
case ERROR: logger.error(message); break;
case FATAL: logger.error(message); break;
case DEBUG: logger.debug(message.toString()); break;
case INFO: logger.info(message.toString()); break;
case WARN: logger.warn(message.toString()); break;
case ERROR: logger.error(message.toString()); break;
case FATAL: logger.error(message.toString()); break;
}
}

@Override
public void log(Level level, String message, Throwable ex) {
if ( level == null ) { logger.error(message, ex); return; }
public void log(Level level, CharSequence message, Throwable ex) {
if ( level == null ) { logger.error(message.toString(), ex); return; }
switch ( level ) {
case DEBUG: logger.debug(message, ex); break;
case INFO: logger.info(message, ex); break;
case WARN: logger.warn(message, ex); break;
case ERROR: logger.error(message, ex); break;
case FATAL: logger.error(message, ex); break;
case DEBUG: logger.debug(message.toString(), ex); break;
case INFO: logger.info(message.toString(), ex); break;
case WARN: logger.warn(message.toString(), ex); break;
case ERROR: logger.error(message.toString(), ex); break;
case FATAL: logger.error(message.toString(), ex); break;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,32 +213,22 @@ public boolean isEnabled(Level level) {
}

@Override
public void log(String message) {
public void log(CharSequence message) {
logger.log(message);
}

@Override
public void log(String message, Throwable e) {
public void log(CharSequence message, Throwable e) {
logger.log(message, e);
}

@Override @Deprecated
public void log(String level, String message) {
logger.log(level, message);
}

@Override @Deprecated
public void log(String level, String message, Throwable e) {
logger.log(level, message, e);
}

@Override
public void log(Level level, String message) {
public void log(Level level, CharSequence message) {
logger.log(level, message);
}

@Override
public void log(Level level, String message, Throwable e) {
public void log(Level level, CharSequence message, Throwable e) {
logger.log(level, message, e);
}

Expand Down
Loading