Wrapper and core Logger compatible adapter for the SLF4J logging interface.
require 'rjack-slf4j' log = RJack::SLF4J[ "my.app.logger" ] log.info "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.
Synonym for RJack::SLF4J::Logger.new( name )
# File lib/rjack-slf4j.rb, line 252 def self.[]( name ) Logger.new( name ) end
The ILoggerFactory instance if an output adapter has been loaded
# File lib/rjack-slf4j.rb, line 257 def self.linked_factory org.slf4j.LoggerFactory.getILoggerFactory end
Get Logger by name
# File lib/rjack-slf4j.rb, line 246 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 128 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
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 140 def self.to_log_name( clz ) clz.name.gsub( /::/, '.' ).gsub( /([^\.]+)\./ ) { |m| m.downcase } end