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
Public Class Methods
Synonym for RJack::SLF4J::Logger.new( name )
# File lib/rjack-slf4j.rb, line 352 def self.[]( name ) Logger.new( name ) end
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
Get Logger by name
# File lib/rjack-slf4j.rb, line 346 def logger( name = self.class.name ) Logger.new( name ) end
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 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
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
# File lib/rjack-slf4j.rb, line 144 def self.ruby_ex_format=( f ) @@ruby_ex_format = f.dup.freeze end
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