Module: RJack::Logback

Defined in:
lib/rjack-logback.rb,
lib/rjack-logback/base.rb

Overview

Jruby wrapper module for the Logback log writer. Programmatic configuration and setting of logger output levels is supported.

Examples

High level configuration

require 'rjack-logback'
RJack::Logback.config_console( :thread => true, :level => :info )

Low level configuration

require 'rjack-logback'

log = RJack::SLF4J[ 'example' ]
log.info "About to reconfigure..."

RJack::Logback.configure do
  console = RJack::Logback::ConsoleAppender.new do |a|
    a.target = "System.err"
    a.layout = RJack::Logback::PatternLayout.new do |p|
      p.pattern = "%r %-5level %logger{35} - %msg %ex%n"
    end
  end
  RJack::Logback.root.add_appender( console )
  RJack::Logback.root.level = RJack::Logback::INFO
end

# Adjust output levels (also works outside of configure )
RJack::Logback[ 'example' ].level = RJack::Logback::DEBUG

log.debug "...after reconfigure."

Configure with Logback XML configuration:

RJack::Logback.configure do
  RJack::Logback.load_xml_config( 'sample-logback.xml' )
end

Programmatic Configuration Support

Logback java classes implement interfaces LifeCycle and ContextAware for configurability with Joran (XML). To simplify configuration in ruby, the following classes have been extended:

  • ConsoleAppender

  • FileAppender

  • PatternLayout

The extensions provide a block initializer which sets sensible defaults, yields to a block for customization, and then calls start. Logback provides many other components not yet extended in this way. These can be created directly and or extended in a similar fashion externally. Consider providing a patch to the rjack project with desired extensions.

Defined Under Namespace

Modules: AppenderUtil, Util Classes: ConsoleAppender, FileAppender, LevelChangePropagator, Logger, PatternLayout

Constant Summary collapse

Level =

ch.qos.logback.classic.Level

Java::ch.qos.logback.classic.Level
TRACE =

Level::TRACE

Level::TRACE
DEBUG =

Level::DEBUG

Level::DEBUG
INFO =

Level::INFO

Level::INFO
WARN =

Level::WARN

Level::WARN
ERROR =

Level::ERROR

Level::ERROR
OFF =

Level::OFF

Level::OFF
DEFAULT_PATTERN =

:nodoc:

"%date [%thread] %-5level %logger{35} - %msg %ex%n"
JoranConfigurator =

ch.qos.logback.classic.joran.JoranConfigurator

Java::ch.qos.logback.classic.joran.JoranConfigurator
JPatternLayout =

ch.qos.logback.classic.PatternLayout

Java::ch.qos.logback.classic.PatternLayout
JConsoleAppender =

ch.qos.logback.core.ConsoleAppender

Java::ch.qos.logback.core.ConsoleAppender
JFileAppender =

ch.qos.logback.core.FileAppender

Java::ch.qos.logback.core.FileAppender
JLevelChangePropagator =
Java::ch.qos.logback.classic.jul.LevelChangePropagator
LOGBACK_VERSION =

Logback java version

'1.1.7'
VERSION =

Logback gem version

'1.8.1'
LOGBACK_DIR =

:nodoc:

File.dirname(__FILE__)
@@context =
SLF4J.linked_factory

Class Method Summary collapse

Class Method Details

.[](name) ⇒ Object

Synonym for logger(name)



341
342
343
# File 'lib/rjack-logback.rb', line 341

def self.[](name)
  logger( name )
end

.config_console(options = {}) ⇒ Object

Configure a single ConsoleAppender using options hash.

Options

:stderr

Output to standard error? (default: false)

:full

Output full date? (default: false, milliseconds)

:thread

Output thread name? (default: false)

:level<Level || Symbol>

Set root level (default: INFO)

:lwidth<~to_s>

Logger width (default: :full ? 35 : 30)

:mdc<String|Array>

One or more Mapped Diagnostic Context keys

:mdc_width<~to_s}

MDC width (default: unspecified)

:propagate_to_jul

Propagate level changes to java.util.logging, additionally resetting JUL levels if value is :reset (default: false)



302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
# File 'lib/rjack-logback.rb', line 302

def self.config_console( options = {} )
  configure do |ctx|
    if options[ :propagate_to_jul ]
      r = ( options[ :propagate_to_jul ] == :reset )
      ctx.add_listener( LevelChangePropagator.new( r ) )
    end
    console = Logback::ConsoleAppender.new do |a|
      a.target = "System.err" if options[ :stderr ]
      a.layout = Logback::PatternLayout.new do |layout|
        pat = [ options[ :full ] ? '%date' : '%-4r' ]
        pat << '[%thread]' if options[ :thread ]
        pat << '%-5level'

        w = ( options[ :lwidth ] || ( options[ :full ] ? 35 : 30 ) )
        pat << "%logger{#{w}}"

        mdcs = Array( options[ :mdc ] ).map { |k| "%X{#{k}}" }
        unless mdcs.empty?
          mp = ( '\(' + mdcs.join(',') + '\)' )
          mw = options[ :mdc_width ]
          mp = "%-#{mw}(#{mp})" if mw
          pat << mp
        end

        pat += [ '-', '%msg', '%ex%n' ]
        layout.pattern = pat.join( ' ' )
      end
    end
    Logback.root.add_appender( console )
    Logback.root.level = options[ :level ] || INFO
  end
end

.configure {|context| ... } ⇒ Object

Configure Logback with the specified block. The Logback context is reset, yielded to block, and then started after return from the block.

Yields:



281
282
283
284
285
286
287
288
# File 'lib/rjack-logback.rb', line 281

def self.configure
  @@context.reset

  yield context

  Util.start( context )
  nil
end

.contextObject

Returns the LoggerContext



115
116
117
# File 'lib/rjack-logback.rb', line 115

def self.context
  @@context
end

.load_xml_config(file) ⇒ Object

Load the specified Logback (Joran) XML configuration file. Should be called within a configure … block.



174
175
176
177
178
# File 'lib/rjack-logback.rb', line 174

def self.load_xml_config( file )
  cfger = JoranConfigurator.new
  cfger.context = @@context
  cfger.doConfigure( file )
end

.logger(name) ⇒ Object

Returns the named Logger



336
337
338
# File 'lib/rjack-logback.rb', line 336

def self.logger( name )
  Logger.new( @@context.getLogger( name ) )
end

.require_jar(name) ⇒ Object

Load logback jar.



82
83
84
# File 'lib/rjack-logback.rb', line 82

def self.require_jar( name )
  require File.join( LOGBACK_DIR, "#{name}-#{ LOGBACK_VERSION }.jar" )
end

.rootObject

Returns the special “root” Logger



346
347
348
# File 'lib/rjack-logback.rb', line 346

def self.root
  logger( "root" )
end

.to_level(l) ⇒ Object

Converts Symbol to Level constant, or return Level unaltered.



351
352
353
354
355
356
357
# File 'lib/rjack-logback.rb', line 351

def self.to_level( l )
  if l.is_a?( Symbol )
    const_get( l.to_s.upcase.to_sym )
  else
    l
  end
end