module Scriptster::Logger

This module contains the logging function and related configuration.

Public Class Methods

log(msg_type, msg, verbosity=:informative) click to toggle source

Log a string.

The message will be written to both stdout and the log file if configured.

@param [Symbol] msg_type Type of the message. @param [String] msg The contents of the log message. @param [Symbol] verbosity Desired verbosity level of this message.

# File lib/scriptster/logger.rb, line 116
def self.log(msg_type, msg, verbosity=:informative)
  # arguments sanity checks
  unless @@message_types.include? msg_type
    raise ArgumentError, "Unknown message type :#{msg_type}"
  end

  unless @@verbosity_levels.include?(verbosity) and verbosity != :quiet
    raise ArgumentError, "You can't use the :#{verbosity.to_s} verbosity level"
  end

  if @@verbosity_levels[verbosity] <= @@verbosity_levels[@@verbosity]
      ts = Time.now.strftime("%Y-%m-%d %H:%M:%S").style("timestamp")

    name = if @@name != nil && @@name.length > 0
      @@name.style("name")
    else
      ""
    end

    msg.chomp!
    msg = Tco::parse msg, Tco::get_style("#{msg_type.to_s}-message")

    line = @@format % {
      timestamp: ts,
      name: name,
      type: @@message_types[msg_type].style(msg_type.to_s),
      message: msg
    }

    puts line
    STDOUT.flush

    if @@file
      # Strip colours from the message before writing to a file
      @@file.puts line.gsub(/\033\[[0-9]+(;[0-9]+){0,2}m/, "")
    end
  end
end
set_file(file) click to toggle source

A setter for the log file.

@param [String, StringIO, File] file A path or an IO object.

# File lib/scriptster/logger.rb, line 80
def self.set_file(file)
  @@file.close if @@file
  @@file = nil

  case
    when file.is_a?(String) then @@file = File.open file, "w"
    when file.is_a?(File) then @@file = file
    when file.is_a?(StringIO) then @@file = file
    else
      raise "Not a vailid file"
  end
end
set_format(format) click to toggle source

Specify the format of each line in the logs.

The template can reference the following keys:

* timestamp
* name
* type
* message

@example

Logger::set_format "%{timestamp} %{name} %{type} %{message}"

@param [String] format The format template.

# File lib/scriptster/logger.rb, line 105
def self.set_format(format)
  @@format = format
end
set_name(name) click to toggle source

A setter for the script name.

@param [String] name Desired script name.

# File lib/scriptster/logger.rb, line 63
def self.set_name(name)
  @@name = name
end
set_verbosity(level) click to toggle source

A setter for for logger verbosity.

@param [Symbol] level Desired verbosity level.

# File lib/scriptster/logger.rb, line 70
def self.set_verbosity(level)
  msg = "Message verbosity level not recognised (#{})."
  raise msg unless @@verbosity_levels.has_key? level.to_sym

  @@verbosity = level.to_sym
end

Public Instance Methods

log(msg_type, msg, verbosity=:informative) click to toggle source

Instance method wrapper for when the module is included.

@see Logger.log

# File lib/scriptster/logger.rb, line 158
def log(msg_type, msg, verbosity=:informative)
  Logger::log msg_type, msg, verbosity
end