class Logger

Overview

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 of higher will be printed.

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.

If logging to multiple locations is required, an IO::MultiWriter can be used.

Example

require "logger"

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

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

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

Defined in:

logger.cr

Constant Summary

DEBUG = Severity::DEBUG
ERROR = Severity::ERROR
FATAL = Severity::FATAL
INFO = Severity::INFO
UNKNOWN = Severity::UNKNOWN
WARN = Severity::WARN

Constructors

Instance Method Summary

Instance methods inherited from class Reference

==(other : self)
==(other)
==
, dup dup, hash hash, inspect(io : IO) : Nil inspect, object_id : UInt64 object_id, pretty_print(pp) : Nil pretty_print, same?(other : Reference)
same?(other : Nil)
same?
, to_s(io : IO) : Nil to_s

Constructor methods inherited from class Reference

new new

Instance methods inherited from class Object

!=(other) !=, !~(other) !~, ==(other) ==, ===(other : JSON::Any)
===(other : YAML::Any)
===(other)
===
, =~(other) =~, class class, dup dup, hash hash, inspect(io : IO)
inspect
inspect
, itself itself, not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, tap(&block) tap, to_json(io : IO)
to_json
to_json
, to_pretty_json(indent : String = " ")
to_pretty_json(io : IO, indent : String = " ")
to_pretty_json
, to_s
to_s(io : IO)
to_s
, to_yaml(io : IO)
to_yaml
to_yaml
, try(&block) try, unsafe_as(type : T.class) forall T unsafe_as

Constructor methods inherited from class Object

from_json(string_or_io, root : String) : self
from_json(string_or_io) : self
from_json
, from_yaml(string_or_io) : self from_yaml

Constructor Detail

def self.new(io : IO?) #

Creates a new logger that will log to the given io. If io is nil then all log calls will be silently ignored.


View source

Instance Method Detail

def close #

Calls the close method on the object passed to initialize.


View source
def debug(progname = nil, &block) #

Logs the message as returned from the given block if the logger's current severity is lower or equal to DEBUG. The block is not run if the severity is higher. progname overrides a default progname set in this logger.


View source
def debug(message, progname = nil) #

Logs message if the logger's current severity is lower or equal to DEBUG. progname overrides a default progname set in this logger.


View source
def debug? #

Returns true if the logger's current severity is lower or equal to DEBUG.


View source
def error(progname = nil, &block) #

Logs the message as returned from the given block if the logger's current severity is lower or equal to ERROR. The block is not run if the severity is higher. progname overrides a default progname set in this logger.


View source
def error(message, progname = nil) #

Logs message if the logger's current severity is lower or equal to ERROR. progname overrides a default progname set in this logger.


View source
def error? #

Returns true if the logger's current severity is lower or equal to ERROR.


View source
def fatal(progname = nil, &block) #

Logs the message as returned from the given block if the logger's current severity is lower or equal to FATAL. The block is not run if the severity is higher. progname overrides a default progname set in this logger.


View source
def fatal(message, progname = nil) #

Logs message if the logger's current severity is lower or equal to FATAL. progname overrides a default progname set in this logger.


View source
def fatal? #

Returns true if the logger's current severity is lower or equal to FATAL.


View source
def formatter : Logger::Severity, Time, String, String, IO -> Nil #

Customizable Proc (with a reasonable default) which the Logger uses to format and print its entries.

Use this setter to provide a custom formatter. The Logger will invoke it with the following arguments:

  • severity: a Logger::Severity
  • datetime: Time, the entry's timestamp
  • progname: String, the program name, if set when the logger was built
  • message: String, the body of a message
  • io: IO, the Logger's stream, to which you must write the final output

Example:

require "logger"

logger = Logger.new(STDOUT)
logger.progname = "YodaBot"

logger.formatter = Logger::Formatter.new do |severity, datetime, progname, message, io|
  label = severity.unknown? ? "ANY" : severity.to_s
  io << label[0] << ", [" << datetime << " #" << Process.pid << "] "
  io << label.rjust(5) << " -- " << progname << ": " << message
end

logger.warn("Fear leads to anger. Anger leads to hate. Hate leads to suffering.")

# Prints to the console:
# "W, [2017-05-06 18:00:41 -0300 #11927]  WARN --
#  YodaBot: Fear leads to anger. Anger leads to hate. Hate leads to suffering."

View source
def formatter=(formatter) #

Customizable Proc (with a reasonable default) which the Logger uses to format and print its entries.

Use this setter to provide a custom formatter. The Logger will invoke it with the following arguments:

  • severity: a Logger::Severity
  • datetime: Time, the entry's timestamp
  • progname: String, the program name, if set when the logger was built
  • message: String, the body of a message
  • io: IO, the Logger's stream, to which you must write the final output

Example:

require "logger"

logger = Logger.new(STDOUT)
logger.progname = "YodaBot"

logger.formatter = Logger::Formatter.new do |severity, datetime, progname, message, io|
  label = severity.unknown? ? "ANY" : severity.to_s
  io << label[0] << ", [" << datetime << " #" << Process.pid << "] "
  io << label.rjust(5) << " -- " << progname << ": " << message
end

logger.warn("Fear leads to anger. Anger leads to hate. Hate leads to suffering.")

# Prints to the console:
# "W, [2017-05-06 18:00:41 -0300 #11927]  WARN --
#  YodaBot: Fear leads to anger. Anger leads to hate. Hate leads to suffering."

View source
def info(message, progname = nil) #

Logs message if the logger's current severity is lower or equal to INFO. progname overrides a default progname set in this logger.


View source
def info(progname = nil, &block) #

Logs the message as returned from the given block if the logger's current severity is lower or equal to INFO. The block is not run if the severity is higher. progname overrides a default progname set in this logger.


View source
def info? #

Returns true if the logger's current severity is lower or equal to INFO.


View source
def level : Severity #

View source
def level=(level : Severity) #

View source
def log(severity, message, progname = nil) #

Logs message if severity is higher or equal with the logger's current severity. progname overrides a default progname set in this logger.


View source
def log(severity, progname = nil, &block) #

Logs the message as returned from the given block if severity is higher or equal with the loggers current severity. The block is not run if severity is lower. progname overrides a default progname set in this logger.


View source
def progname : String #

View source
def progname=(progname : String) #

View source
def unknown(message, progname = nil) #

Logs message if the logger's current severity is lower or equal to UNKNOWN. progname overrides a default progname set in this logger.


View source
def unknown(progname = nil, &block) #

Logs the message as returned from the given block if the logger's current severity is lower or equal to UNKNOWN. The block is not run if the severity is higher. progname overrides a default progname set in this logger.


View source
def unknown? #

Returns true if the logger's current severity is lower or equal to UNKNOWN.


View source
def warn(progname = nil, &block) #

Logs the message as returned from the given block if the logger's current severity is lower or equal to WARN. The block is not run if the severity is higher. progname overrides a default progname set in this logger.


View source
def warn(message, progname = nil) #

Logs message if the logger's current severity is lower or equal to WARN. progname overrides a default progname set in this logger.


View source
def warn? #

Returns true if the logger's current severity is lower or equal to WARN.


View source