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

      1. current thread's formatter for specified severity
      2. master thread's formatter for specified severity
      3. 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