ABOUT
The 'buffered_logger' gem is an extension to ActiveSupport::BufferedLogger which gives the the little logger some much needed formatting support. The actual logging work is still delegated to to active_support/buffered_logger.
FEATURES
- per thread indentation
- per thread auto flush setting
- temporary indentation blocks
- per severity formatting
- ansi color output formats
USAGE
default initialization
l = BufferedLogger.new(STDOUT)
changing the severity level
l.level = :warn l.level = 1
formatter constructor (initializes the master thread's formatters)
l = BufferedLogger.new(STDOUT, :debug,
{ :info => "$green INFO: $white %s",
:warn => "$yellow WARNING: $white %s",
:error => "$red ERROR: $white %s" } )
setting formatting after initialization
l.info_formatter = "$green INFO: $white %s",
l.warn_formatter = "$yellow WARNING: $white %s"
l.error_formatter = "$red ERROR: $white %s"
checking the current thread's formatting
l.info_formatter.to_s l.warn_formatter.to_s ...
checking the current thread's indentation
l.padding.to_s
setting the current thread's indentation
l.indent(4) # move cursor right 4 spaces l.indent(-2) # move cursor left 2 spaces l.indent(:reset) # reset indentation
temporarily indenting using an indent block
l.indent do l.info 'some info' ... l.info 'some more info' end
setting auto_flushing
l.auto_flushing = 2
USAGE DETAILS
-
Severity Levels
- severity level is optional and defaults to :debug
- severity level can be provided as an Integer or Symbol 0 - DEBUG 1 - INFO 2 - WARN 3 - ERROR 4 - FATAL 5 - UNKNOWN
-
ActiveSupport::BufferedLogger
- native buffered_logger functionality is preserved $ ActiveSupport::BufferedLogger.public_instance_methods(false) => ["add", "info", "fatal?", "auto_flushing", "fatal", "silencer", "debug", "info?", "warn?", "auto_flushing=", "silencer=", "level", "error?", "unknown", "debug?", "flush", "level=", "open_log", "warn", "unknown?", "silence", "error", "close"]
-
ANSI Color
- colors are only supported when logging to STDOUT
- any ansi method may be used in a format string following a '$' symbol $ Term::ANSIColor.instance_methods => ["black", "on_yellow", "underscore", "rapid_blink", "white", "bold", "yellow", "on_cyan", "strikethrough", "on_green", "uncolored", "blink", "cyan", "reset", "green", "on_magenta", "clear", "concealed", "on_red", "dark", "underline", "magenta", "red", "on_blue", "negative", "on_black", "italic", "blue", "on_white"]
-
Indentation
- the padding is calculated on a per thread basis and each thread has an indentation counter which is shared across all severity levels
-
Formatting
- formatters are set on a per thread/per severity basis, meaning that every severity level for every thread allows for a custom formatter
- the formatter search order is as follows
- current thread's formatter for specified severity
- master thread's formatter for specified severity
- master thread's default formatter
-
Thread Buffering
- the auto_flushing setting is set per thread and each thread defaults to the autoflush setting of the master thread unless explicitly configured