File
outputter.rb
Path: log4r/outputter/outputter.rb
Modified: Fri Sep 12 16:55:43 PDT 2003

Outputters

An Outputter is a logging destination with a particular way to format data. It has a level threshold and a flexible level mask.

Outputters must have names.

Level Threshold

Outputters have their own level thresholds that default to root level. They will not write any log events with a rank less than their threshold.

Level Mask

Alternatively, an Outputter can be told to log specific levels only:

  o = StdoutOutputter.new 'console'
  o.only_at DEBUG, FATAL         # only DEBUG and FATAL get written

Outputter Repository

When outputters are created, they store themselves in an Outputter repository similar to the Logger repository.

  StdoutOutputter.new 'console'   => Create 'console' outputter
  Outputter['console']            => Get it back from the stash.

Formatter

An outputter has a format defined by its Formatter. If no Formatter is specified, DefaultFormatter will be used.

Outputter is Abstract

The basic Outputter class is both abstract and a null object.

Interesting Outputters

Subclasses

Default Outputters

Two outputters named ‘stdout’ and ‘stderr’ are created automatically at the root level. They are nice shortcuts.

  Outputter['stdout'] => 'stdout'
  Outputter['stderr'] => 'stderr'
  Outputter.stdout    => 'stdout'
  Outputter.stderr    => 'stderr'

Configuring

Outputters must have names and receive hash arguments. The parameter name for the hash args can be either a symbol or a string. All defined outputters accept :level and :formatter arguments. For arguments specific to a convenience Outputter, please look at the class description.

The level threshold, the levels to log at (only_at) and formatter can be changed dynamically using the = methods.

As a collective example of all this, here are various ways to set up an IOOutputter:

  IOOutputter.new ExoticIO.new 'exotic', 'level' => WARN,
                  :formatter => MyFormatter.new
  # an equivalent way:
  o = IOOutputter.new ExoticIO.new 'exotic'
  o.level = WARN
  o.formatter = MyFormatter         # we can specify just the class
  o.only_at = THIS, THAT

XML Configuration

Specify outputters as children of <log4r_config>:

  <log4r_config>
    <outputter name="myout" type="Log4r::StdoutOutputter">
      <only_at>DEBUG, INFO</only_at>
    </outputter>
    <outputter name="file" level="WARN">
      <type>FileOutputter</type>
      <filename>#{logpath}/file.log</filename>
      <trunc>false</trunc>
    </outputter>
    ...

As explained in log4r/configurator.rb, the hash arguments you would normally pass to new are specified as XML parameters. It is given an IO object to write to, a Formatter to call, and, optionally, levels to write at.

Outputters invoke print then flush on the wrapped IO object. If the IO chokes, the Outputter will close the IO and set its level to OFF.

Other Info

Version:$Id: outputter.rb,v 1.6 2003/09/12 23:55:43 fando Exp $
Author:Leon Torres <leon@ugcs.caltech.edu>
Required files

thread log4r/outputter/outputterfactory log4r/formatter/formatter log4r/staticlogger
Classes and Modules

Module Log4r
  ::Class Log4r::BasicFormatter
  ::Class Log4r::ConfigError
  ::Class Log4r::Configurator
  ::Class Log4r::DateFileOutputter
  ::Class Log4r::DefaultFormatter
  ::Class Log4r::EmailOutputter
  ::Class Log4r::FileOutputter
  ::Class Log4r::Formatter
  ::Class Log4r::IOOutputter
  ::Class Log4r::Log4rTools
  ::Class Log4r::LogEvent
  ::Class Log4r::LogServer
  ::Class Log4r::Logger
  ::Class Log4r::ObjectFormatter
  ::Class Log4r::Outputter
  ::Class Log4r::PatternFormatter
  ::Class Log4r::RemoteOutputter
  ::Class Log4r::RollingFileOutputter
  ::Class Log4r::RootLogger
  ::Class Log4r::SimpleFormatter
  ::Class Log4r::StderrOutputter
  ::Class Log4r::StdoutOutputter
  ::Class Log4r::SyslogOutputter
  ::Class Log4r::YamlConfigurator