This is a Ruby tree! It shows every object from the Ruby Programming Language in a tree format.

Logger

        # Logger < Object

---
# Includes:
Severity (from ruby core)

(from ruby core)
---
## Description

The Logger class provides a simple but sophisticated logging utility
that you can use to output messages.

The messages have associated levels, such as `INFO` or `ERROR` that
indicate their importance.  You can then give the Logger a level, and
only messages at that level or higher will be printed.

The levels are:

`UNKNOWN`
:   An unknown message that should always be logged.
`FATAL`
:   An unhandleable error that results in a program crash.
`ERROR`
:   A handleable error condition.
`WARN`
:   A warning.
`INFO`
:   Generic (useful) information about system operation.
`DEBUG`
:   Low-level information for developers.


For instance, in a production system, you may have your Logger set to
`INFO` or even `WARN`. When you are developing the system, however, you
probably want to know about the program's internal state, and would set
the Logger to `DEBUG`.

**Note**: Logger does not escape or sanitize any messages passed to it.
Developers should be aware of when potentially malicious data
(user-input) is passed to Logger, and manually escape the untrusted
data:

    logger.info("User-input: #{input.dump}")
    logger.info("User-input: %p" % input)

You can use #formatter= for escaping all data.

    original_formatter = Logger::Formatter.new
    logger.formatter = proc { |severity, datetime, progname, msg|
      original_formatter.call(severity, datetime, progname, msg.dump)
    }
    logger.info(input)

### Example

This creates a Logger that outputs to the standard output stream, with a
level of `WARN`:

    require 'logger'

    logger = Logger.new(STDOUT)
    logger.level = Logger::WARN

    logger.debug("Created logger")
    logger.info("Program started")
    logger.warn("Nothing to do!")

    path = "a_non_existent_file"

    begin
      File.foreach(path) do |line|
        unless line =~ /^(\w+) = (.*)$/
          logger.error("Line in wrong format: #{line.chomp}")
        end
      end
    rescue => err
      logger.fatal("Caught exception; exiting")
      logger.fatal(err)
    end

Because the Logger's level is set to `WARN`, only the warning, error,
and fatal messages are recorded.  The debug and info messages are
silently discarded.

### Features

There are several interesting features that Logger provides, like
auto-rolling of log files, setting the format of log messages, and
specifying a program name in conjunction with the message.  The next
section shows you how to achieve these things.

## HOWTOs

### How to create a logger

The options below give you various choices, in more or less increasing
complexity.

1.  Create a logger which logs messages to STDERR/STDOUT.

        logger = Logger.new(STDERR)
        logger = Logger.new(STDOUT)

2.  Create a logger for the file which has the specified name.

        logger = Logger.new('logfile.log')

3.  Create a logger for the specified file.

        file = File.open('foo.log', File::WRONLY | File::APPEND)
        # To create new logfile, add File::CREAT like:
        # file = File.open('foo.log', File::WRONLY | File::APPEND | File::CREAT)
        logger = Logger.new(file)

4.  Create a logger which ages the logfile once it reaches a certain
    size. Leave 10 "old" log files where each file is about 1,024,000
    bytes.

        logger = Logger.new('foo.log', 10, 1024000)

5.  Create a logger which ages the logfile daily/weekly/monthly.

        logger = Logger.new('foo.log', 'daily')
        logger = Logger.new('foo.log', 'weekly')
        logger = Logger.new('foo.log', 'monthly')


### How to log a message

Notice the different methods (`fatal`, `error`, `info`) being used to
log messages of various levels?  Other methods in this family are `warn`
and `debug`.  `add` is used below to log a message of an arbitrary
(perhaps dynamic) level.

1.  Message in a block.

        logger.fatal { "Argument 'foo' not given." }

2.  Message as a string.

        logger.error "Argument #{@foo} mismatch."

3.  With progname.

        logger.info('initialize') { "Initializing..." }

4.  With severity.

        logger.add(Logger::FATAL) { 'Fatal error!' }


The block form allows you to create potentially complex log messages,
but to delay their evaluation until and unless the message is logged. 
For example, if we have the following:

    logger.debug { "This is a " + potentially + " expensive operation" }

If the logger's level is `INFO` or higher, no debug messages will be
logged, and the entire block will not even be evaluated.  Compare to
this:

    logger.debug("This is a " + potentially + " expensive operation")

Here, the string concatenation is done every time, even if the log level
is not set to show the debug message.

### How to close a logger

    logger.close

### Setting severity threshold

1.  Original interface.

        logger.sev_threshold = Logger::WARN

2.  Log4r (somewhat) compatible interface.

        logger.level = Logger::INFO

        # DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN

3.  Symbol or String (case insensitive)

        logger.level = :info
        logger.level = 'INFO'

        # :debug < :info < :warn < :error < :fatal < :unknown

4.  Constructor

        Logger.new(logdev, level: Logger::INFO)
        Logger.new(logdev, level: :info)
        Logger.new(logdev, level: 'INFO')


## Format

Log messages are rendered in the output stream in a certain format by
default.  The default format and a sample are shown below:

Log format:
    SeverityID, [DateTime #pid] SeverityLabel -- ProgName: message

Log sample:
    I, [1999-03-03T02:34:24.895701 #19074]  INFO -- Main: info.

You may change the date and time format via #datetime_format=.

    logger.datetime_format = '%Y-%m-%d %H:%M:%S'
          # e.g. "2004-01-03 00:54:26"

or via the constructor.

    Logger.new(logdev, datetime_format: '%Y-%m-%d %H:%M:%S')

Or, you may change the overall format via the #formatter= method.

    logger.formatter = proc do |severity, datetime, progname, msg|
      "#{datetime}: #{msg}\n"
    end
    # e.g. "2005-09-22 08:51:08 +0900: hello world"

or via the constructor.

    Logger.new(logdev, formatter: proc {|severity, datetime, progname, msg|
      "#{datetime}: #{msg}\n"
    })

not used after 1.2.7. just for compat.





---
# Constants:

ProgName
:   [not documented]
SEV_LABEL
:   Severity label for logging (max 5 chars).
VERSION
:   [not documented]


# Class methods:

    new

# Instance methods:

    <<
    add
    close
    datetime_format
    datetime_format=
    debug
    debug!
    debug?
    error
    error!
    error?
    fatal
    fatal!
    fatal?
    format_message
    format_severity
    formatter
    info
    info!
    info?
    level
    level=
    log
    progname
    reopen
    sev_threshold
    sev_threshold=
    unknown
    warn
    warn!
    warn?

# Attributes:

    attr_accessor formatter
    attr_accessor progname
    attr_reader level
    attr_reader sev_threshold


      

This is MURDOC! A Ruby documentation browser inspired by Smalltalk-80. It allows you to learn about Ruby by browsing through its class hierarchies, and see any of its methods.