module Chemlab::Runtime::Logger

Logger module

Public Instance Methods

log(obj, type = :info, **args) click to toggle source

Log something to a stream @param [Any] obj Any object that responds to to_s @param [Symbol] type The type of message logged @param [Hash] args Any additional arguments @example

log('something', :info)                                   #=> logs INFO :: something, to $stdout
log('error', :err)                                        #=> logs ERR  :: error, to $stderr
log('important', :important, stream: $stderr)             #=> logs IMPO :: important, to $stderr
log('to file', :info, stream: File.open('file.txt', 'w')) #=> logs INFO :: to file, to the file.txt file
# File lib/chemlab/runtime/logger.rb, line 16
def log(obj, type = :info, **args)
  raise ArgumentError, "Cannot log #{obj} as it does not respond to to_s!" unless obj.respond_to?(:to_s)

  args[:stream] = type.match?(/(err(or)?|warn(ing)?)/) ? $stderr : $stdout

  prefix = Time.now.strftime('%Y-%m-%d %H:%M:%S / ')
  prefix << type[0..3].upcase << "\t:: " # we only want the prefix to be four chars long
  args[:stream].puts(prefix << obj.to_s)
end