module RJack::SLF4J

Wrapper and core Logger compatible adapter for the SLF4J logging interface.


require 'rjack-slf4j'

log = RJack::SLF4J[ "" ] "Hello World!"


An output adapter must be required before the first log call. All of the following output adapters are available via require from the slf4j gem:

require 'rjack-slf4j/jcl'       # Output to Jakarta Commons Logging
require 'rjack-slf4j/jdk14'     # JDK java.util.logging (JUL)
require 'rjack-slf4j/log4j12'   # Log4j (provided elsewhere)
require 'rjack-slf4j/nop'       # NOP null logger (provided)
require 'rjack-slf4j/simple'    # Simple logger (provided)

The rjack-logback gem may also be be used as the output adapter:

require 'rjack-logback'

The first loaded output adapter wins (as with multiple adapters on the classpath). A warning will be logged to “slf4j” if an attempt is made to require a second output adapter.

The following input adapters will intercept JCL, java.util.logging (JUL), or log4j log output and direct it through SLF4J:

require 'rjack-slf4j/jcl-over-slf4j'   # Route Jakarta Commons Logging to SLF4J
require 'rjack-slf4j/log4j-over-slf4j' # Log4j to SLF4J

require 'rjack-slf4j/jul-to-slf4j'     # JDK java.util.logging (JUL) to SLF4J
RJack::SLF4J::JUL.replace_root_handlers # Special case setup for JUL

Multiple input adapters may be require'd. However, a RuntimeError will be raised in the attempt to require both an output adapter and input adapter from/to the same interface, for example 'rjack-slf4j/jcl-over-slf4j' and 'rjack-slf4j/jcl', which would otherwise cause a circular logging loop (and stack overflow.)

Adapter names match the corresponding SLF4J jars.



SLF4J severity levels


SLF4J-java version


SLF4J gem version

Public Class Methods

[]( name ) click to toggle source

Synonym for name )

# File lib/rjack-slf4j.rb, line 352
def self.[]( name ) name )
linked_factory() click to toggle source

The ILoggerFactory instance if an output adapter has been loaded

# File lib/rjack-slf4j.rb, line 357
def self.linked_factory
logger( name = ) click to toggle source

Get Logger by name

# File lib/rjack-slf4j.rb, line 346
def logger( name = ) name )
output_name() click to toggle source

Output adapter name if one has been added, or nil.

# File lib/rjack-slf4j.rb, line 129
def self.output_name
require_adapter( name ) click to toggle source

Require an adapter by name (add the jar to classpath) This is normally done via require 'slf4j/name'

# File lib/rjack-slf4j.rb, line 82
def self.require_adapter( name )
  row = ADAPTERS.assoc( name )
  if row
    name,ban = row
    output = false
    row = ADAPTERS.rassoc( name )
    ban,name = row
    output = true

  if @@loaded[ ban ]
    raise "Illegal attempt to load '#{name}' when '#{ban}' is loaded."

  if output
    if ! @@output_name.nil? && name != @@output_name
      logger("slf4j").warn do
        "Ignoring attempt to load #{name} after #{@@output_name} already loaded."
    if java.lang.Thread::current_thread.context_class_loader != @@api_loader
      $stderr.puts( "WARNING: Attempting to load #{name} in child class" +
                    " loader of slf4j-api.jar loader." )
    require_jar( 'slf4j-' + name )
    @@output_name = name
    require_jar( name )

  @@loaded[ name ] = true
ruby_ex_format() click to toggle source

A (sprintf) format string to use when synthesizing a log message from a prefix message (msg) (i.e. “Exception:”) and ruby exception (ex) using [ msg,, ex.cause ]. Since ruby exceptions aren't instances of java Throwable, they can't be passed directly. This can be globally set to match the formatting of the output adapter (i.e. for java exceptions), preferably in the same place it is required and configured.

# File lib/rjack-slf4j.rb, line 140
def self.ruby_ex_format
ruby_ex_format=( f ) click to toggle source
# File lib/rjack-slf4j.rb, line 144
def self.ruby_ex_format=( f )
  @@ruby_ex_format = f.dup.freeze
ruby_to_java_logger_name( clz )
Alias for: to_log_name
to_log_name( clz ) click to toggle source

Return a java style class name, suitable as a logger name, from the given ruby class or module, i.e:

to_log_name( Foo::Bar::Baz ) --> ""
# File lib/rjack-slf4j.rb, line 156
def self.to_log_name( clz ) /::/, '.' ).gsub( /([^\.]+)\./ ) { |m| m.downcase }
Also aliased as: ruby_to_java_logger_name