module RJack::SLF4J

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

Usage

require 'rjack-slf4j'

log = RJack::SLF4J[ "my.app.logger" ]
log.info "Hello World!"

Adapters

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.

Constants

LEVELS

SLF4J severity levels

SLF4J_VERSION

SLF4J-java version

VERSION

SLF4J gem version

Public Class Methods

[]( name ) click to toggle source

Synonym for RJack::SLF4J::Logger.new( name )

# File lib/rjack-slf4j.rb, line 352
def self.[]( name )
  Logger.new( name )
end
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
   org.slf4j.LoggerFactory.getILoggerFactory
end
logger( name = self.class.name ) click to toggle source

Get Logger by name

# File lib/rjack-slf4j.rb, line 346
def logger( name = self.class.name )
  Logger.new( name )
end
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
  @@output_name
end
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
  else
    row = ADAPTERS.rassoc( name )
    ban,name = row
    output = true
  end

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

  if output
    if ! @@output_name.nil? && name != @@output_name
      logger("slf4j").warn do
        "Ignoring attempt to load #{name} after #{@@output_name} already loaded."
      end
      return
    end
    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." )
    end
    require_jar( 'slf4j-' + name )
    @@output_name = name
  else
    require_jar( name )
  end

  @@loaded[ name ] = true
end
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.class.name, 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
end
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
end
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 ) --> "foo.bar.Baz"
# File lib/rjack-slf4j.rb, line 156
def self.to_log_name( clz )
  clz.name.gsub( /::/, '.' ).gsub( /([^\.]+)\./ ) { |m| m.downcase }
end
Also aliased as: ruby_to_java_logger_name