Module: Scriptster::Logger

Included in:
ShellCmd
Defined in:
lib/scriptster/logger.rb

Overview

This module contains the logging function and related configuration.

Constant Summary collapse

@@name =

The name of the script.

nil
@@file =

The IO object to log to.

nil
@@timestamps =

Show timestamps flag.

false
@@message_types =

Supported message types.

{
  :info => "info",
  :warn => "WARN",
  :err  => "ERR!",
  :debug => "dbg?"
}
@@verbosity =

The default verobosity level.

:verbose
@@verbosity_levels =

Supported verbosity levels.

{
  :quiet => 0,
  :essential => 1,
  :important => 2,
  :informative => 3,
  :verbose => 4
}
@@format =
"%{timestamp} %{name} %{type} %{message}"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.log(msg_type, msg, verbosity = :informative) ⇒ Object

Log a string.

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

Parameters:

  • msg_type (Symbol)

    Type of the message.

  • msg (String)

    The contents of the log message.

  • verbosity (Symbol) (defaults to: :informative)

    Desired verbosity level of this message.



116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# 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) ⇒ Object

A setter for the log file.

Parameters:

  • file (String, StringIO, File)

    A path or an IO object.



80
81
82
83
84
85
86
87
88
89
90
91
# 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) ⇒ Object

Specify the format of each line in the logs.

The template can reference the following keys:

* timestamp
* name
* type
* message

Examples:

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

Parameters:

  • format (String)

    The format template.



105
106
107
# File 'lib/scriptster/logger.rb', line 105

def self.set_format(format)
  @@format = format
end

.set_name(name) ⇒ Object

A setter for the script name.

Parameters:

  • name (String)

    Desired script name.



63
64
65
# File 'lib/scriptster/logger.rb', line 63

def self.set_name(name)
  @@name = name
end

.set_verbosity(level) ⇒ Object

A setter for for logger verbosity.

Parameters:

  • level (Symbol)

    Desired verbosity level.



70
71
72
73
74
75
# 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

Instance Method Details

#log(msg_type, msg, verbosity = :informative) ⇒ Object

Instance method wrapper for when the module is included.

See Also:



158
159
160
# File 'lib/scriptster/logger.rb', line 158

def log(msg_type, msg, verbosity=:informative)
  Logger::log msg_type, msg, verbosity
end