Class: Beaker::Logger
- Inherits:
-
Object
- Object
- Beaker::Logger
- Defined in:
- lib/beaker/logger.rb
Overview
The Beaker Logger class This class handles message reporting for Beaker, it reports based upon a provided log level to a given destination (be it a string or file)
Constant Summary collapse
- NORMAL =
"\e[00;00m"
- BRIGHT_NORMAL =
"\e[00;01m"
- BLACK =
"\e[00;30m"
- RED =
"\e[00;31m"
- GREEN =
"\e[00;32m"
- YELLOW =
"\e[00;33m"
- BLUE =
"\e[00;34m"
- MAGENTA =
"\e[00;35m"
- CYAN =
"\e[00;36m"
- WHITE =
"\e[00;37m"
- GREY =
"\e[01;30m"
- BRIGHT_RED =
"\e[01;31m"
- BRIGHT_GREEN =
"\e[01;32m"
- BRIGHT_YELLOW =
"\e[01;33m"
- BRIGHT_BLUE =
"\e[01;34m"
- BRIGHT_MAGENTA =
"\e[01;35m"
- BRIGHT_CYAN =
"\e[01;36m"
- BRIGHT_WHITE =
"\e[01;37m"
- LOG_LEVELS =
The defined log levels. Each log level also reports messages at levels lower than itself
{ :trace => 6, :debug => 5, :verbose => 3, :info => 2, :notify => 1, :warn => 0, }
Instance Attribute Summary collapse
-
#color ⇒ Object
Returns the value of attribute color.
-
#destinations ⇒ Object
Returns the value of attribute destinations.
-
#last_result ⇒ Object
The results of the most recently run command.
-
#log_level ⇒ Object
Returns the value of attribute log_level.
Class Method Summary collapse
-
.generate_dated_log_folder(base_dir, timestamp) ⇒ String
Utility method to centralize dated log folder generation.
Instance Method Summary collapse
-
#add_destination(dest) ⇒ Object
Construct an array of open steams for printing log messages to.
-
#convert(string) ⇒ Object
Remove invalid UTF-8 codes from provided string(s).
-
#debug(*args) ⇒ Object
Report a debug message.
-
#error(*args) ⇒ Object
Report an error message.
-
#get_sublog ⇒ Object
Return the contents of the sublog.
-
#host_output(*args) ⇒ Object
Custom reporting for messages generated by host SUTs.
-
#info(*args) ⇒ Object
Report an info message.
-
#initialize(*args) ⇒ Logger
constructor
Initialization of the Logger class.
-
#is_debug? ⇒ Boolean
Are we at LOG_LEVELS debug?.
-
#is_info? ⇒ Boolean
Are we at LOG_LEVELS info?.
-
#is_notify? ⇒ Boolean
Are we at LOG_LEVELS notify?.
-
#is_trace? ⇒ Boolean
Are we at LOG_LEVELS trace?.
-
#is_verbose? ⇒ Boolean
Are we at LOG_LEVELS verbose?.
-
#is_warn? ⇒ Boolean
Are we at LOG_LEVELS warn?.
-
#notify(*args) ⇒ Object
Report a notify message.
-
#optionally_color(color_code, msg, add_newline = true) ⇒ Object
Print the provided message to the set destination streams, using color codes if appropriate.
-
#perf_output(*args) ⇒ Object
Custom reporting for performance/sysstat messages Will not print unless we are at LOG_LEVELS ‘debug’ or higher.
-
#pretty_backtrace(backtrace = caller(1)) ⇒ String
Utility method to get the current call stack and format it to a human-readable string (which some IDEs/editors will recognize as links to the line numbers in the trace).
-
#quiet(off = true) ⇒ Object
Turn on/off STDOUT logging.
-
#remove_destination(dest) ⇒ Object
Remove a steam from the destinations array based upon it’s name or file path.
-
#start_sublog ⇒ Object
Create a new StringIO log to track the current output.
-
#strip_colors_from(lines) ⇒ Array<String>
Strip any color codes from provided string(s).
-
#success(*args) ⇒ Object
Report a success message.
-
#trace(*args) ⇒ Object
Report a trace message.
-
#warn(*args) ⇒ Object
Report a warning message.
Constructor Details
#initialize(dests) ⇒ Logger #initialize(dests, options) ⇒ Logger
Initialization of the Logger class
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/beaker/logger.rb', line 55 def initialize(*args) = args.last.is_a?(Hash) ? args.pop : {} @color = [:color] @sublog = nil case [:log_level] when /trace/i, :trace @log_level = :trace when /debug/i, :debug @log_level = :debug when /verbose/i, :verbose @log_level = :verbose when /info/i, :info @log_level = :info when /notify/i, :notify @log_level = :notify when /warn/i, :warn @log_level = :warn else @log_level = :verbose end @last_result = nil @destinations = [] dests = args dests << STDOUT unless [:quiet] dests.uniq! dests.each {|dest| add_destination(dest)} end |
Instance Attribute Details
#color ⇒ Object
Returns the value of attribute color.
40 41 42 |
# File 'lib/beaker/logger.rb', line 40 def color @color end |
#destinations ⇒ Object
Returns the value of attribute destinations.
40 41 42 |
# File 'lib/beaker/logger.rb', line 40 def destinations @destinations end |
#last_result ⇒ Object
The results of the most recently run command
9 10 11 |
# File 'lib/beaker/logger.rb', line 9 def last_result @last_result end |
#log_level ⇒ Object
Returns the value of attribute log_level.
40 41 42 |
# File 'lib/beaker/logger.rb', line 40 def log_level @log_level end |
Class Method Details
.generate_dated_log_folder(base_dir, timestamp) ⇒ String
Utility method to centralize dated log folder generation
309 310 311 312 313 |
# File 'lib/beaker/logger.rb', line 309 def Logger.generate_dated_log_folder(base_dir, ) log_dir = File.join(base_dir, .strftime("%F_%H_%M_%S")) FileUtils.mkdir_p(log_dir) unless File.directory?(log_dir) log_dir end |
Instance Method Details
#add_destination(dest) ⇒ Object
Construct an array of open steams for printing log messages to
100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/beaker/logger.rb', line 100 def add_destination(dest) case dest when IO @destinations << dest when StringIO @destinations << dest when String @destinations << File.open(dest, 'w') else raise "Unsuitable log destination #{dest.inspect}" end end |
#convert(string) ⇒ Object
Remove invalid UTF-8 codes from provided string(s)
166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/beaker/logger.rb', line 166 def convert string if string.kind_of?(Array) string.map do |s| convert s end else # Remove invalid and undefined UTF-8 character encodings string.to_s.force_encoding('UTF-8') return string.to_s.chars.select{|i| i.valid_encoding?}.join end end |
#debug(*args) ⇒ Object
Report a debug message. Will not print unless we are at LOG_LEVELS ‘debug’ or higher.
210 211 212 213 |
# File 'lib/beaker/logger.rb', line 210 def debug *args return unless is_verbose? optionally_color WHITE, *args end |
#error(*args) ⇒ Object
Report an error message. Will always be reported.
251 252 253 |
# File 'lib/beaker/logger.rb', line 251 def error *args optionally_color BRIGHT_RED, *args end |
#get_sublog ⇒ Object
Return the contents of the sublog
298 299 300 301 |
# File 'lib/beaker/logger.rb', line 298 def get_sublog @sublog.rewind @sublog.read end |
#host_output(*args) ⇒ Object
Custom reporting for messages generated by host SUTs. Will not print unless we are at LOG_LEVELS ‘verbose’ or higher. Strips any color codes already in the provided messages, then adds logger color codes before reporting
182 183 184 185 186 187 |
# File 'lib/beaker/logger.rb', line 182 def host_output *args return unless is_verbose? strings = strip_colors_from args string = strings.join optionally_color GREY, string, false end |
#info(*args) ⇒ Object
Report an info message. Will not print unless we are at LOG_LEVELS ‘info’ or higher.
228 229 230 231 |
# File 'lib/beaker/logger.rb', line 228 def info *args return unless is_info? optionally_color BLUE, *args end |
#is_debug? ⇒ Boolean
Are we at LOG_LEVELS debug?
136 137 138 |
# File 'lib/beaker/logger.rb', line 136 def is_debug? LOG_LEVELS[@log_level] >= LOG_LEVELS[:debug] end |
#is_info? ⇒ Boolean
Are we at LOG_LEVELS info?
154 155 156 |
# File 'lib/beaker/logger.rb', line 154 def is_info? LOG_LEVELS[@log_level] >= LOG_LEVELS[:info] end |
#is_notify? ⇒ Boolean
Are we at LOG_LEVELS notify?
160 161 162 |
# File 'lib/beaker/logger.rb', line 160 def is_notify? LOG_LEVELS[@log_level] >= LOG_LEVELS[:notify] end |
#is_trace? ⇒ Boolean
Are we at LOG_LEVELS trace?
130 131 132 |
# File 'lib/beaker/logger.rb', line 130 def is_trace? LOG_LEVELS[@log_level] >= LOG_LEVELS[:trace] end |
#is_verbose? ⇒ Boolean
Are we at LOG_LEVELS verbose?
142 143 144 |
# File 'lib/beaker/logger.rb', line 142 def is_verbose? LOG_LEVELS[@log_level] >= LOG_LEVELS[:verbose] end |
#is_warn? ⇒ Boolean
Are we at LOG_LEVELS warn?
148 149 150 |
# File 'lib/beaker/logger.rb', line 148 def is_warn? LOG_LEVELS[@log_level] >= LOG_LEVELS[:warn] end |
#notify(*args) ⇒ Object
Report a notify message. Will not print unless we are at LOG_LEVELS ‘notify’ or higher.
243 244 245 246 |
# File 'lib/beaker/logger.rb', line 243 def notify *args return unless is_notify? optionally_color BRIGHT_WHITE, *args end |
#optionally_color(color_code, msg, add_newline = true) ⇒ Object
Print the provided message to the set destination streams, using color codes if appropriate
268 269 270 271 272 273 274 275 |
# File 'lib/beaker/logger.rb', line 268 def optionally_color color_code, msg, add_newline = true print_statement = add_newline ? :puts : :print @destinations.each do |to| to.print color_code if @color to.send print_statement, convert( msg ) to.print NORMAL if @color end end |
#perf_output(*args) ⇒ Object
Custom reporting for performance/sysstat messages Will not print unless we are at LOG_LEVELS ‘debug’ or higher.
192 193 194 195 196 197 |
# File 'lib/beaker/logger.rb', line 192 def perf_output *args return unless is_debug? strings = strip_colors_from args string = strings.join optionally_color MAGENTA, string, false end |
#pretty_backtrace(backtrace = caller(1)) ⇒ String
Utility method to get the current call stack and format it to a human-readable string (which some IDEs/editors will recognize as links to the line numbers in the trace). Beaker associated files will be purged from backtrace unless log level is ‘debug’ or higher
283 284 285 286 |
# File 'lib/beaker/logger.rb', line 283 def pretty_backtrace backtrace = caller(1) trace = is_debug? ? backtrace : purge_harness_files_from( backtrace ) ( trace ).join "\n" end |
#quiet(off = true) ⇒ Object
Turn on/off STDOUT logging
89 90 91 92 93 94 95 96 |
# File 'lib/beaker/logger.rb', line 89 def quiet(off = true) if off remove_destination(STDOUT) #turn off the noise! else remove_destination(STDOUT) #in case we are calling this in error and we are already noisy add_destination(STDOUT) end end |
#remove_destination(dest) ⇒ Object
Remove a steam from the destinations array based upon it’s name or file path
115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/beaker/logger.rb', line 115 def remove_destination(dest) case dest when IO @destinations.delete(dest) when StringIO @destinations.delete(dest) when String @destinations.delete_if {|d| d.respond_to?(:path) and d.path == dest} else raise "Unsuitable log destination #{dest.inspect}" end end |
#start_sublog ⇒ Object
Create a new StringIO log to track the current output
289 290 291 292 293 294 295 |
# File 'lib/beaker/logger.rb', line 289 def start_sublog if @sublog remove_destination(@sublog) end @sublog = StringIO.new add_destination(@sublog) end |
#strip_colors_from(lines) ⇒ Array<String>
Strip any color codes from provided string(s)
258 259 260 261 262 |
# File 'lib/beaker/logger.rb', line 258 def strip_colors_from lines Array( lines ).map do |line| convert(line).gsub(/(\e|\^\[)\[(\d*;)*\d*m/, '') end end |
#success(*args) ⇒ Object
Report a success message. Will always be reported.
236 237 238 |
# File 'lib/beaker/logger.rb', line 236 def success *args optionally_color GREEN, *args end |
#trace(*args) ⇒ Object
Report a trace message. Will not print unless we are at LOG_LEVELS ‘trace’ or higher.
202 203 204 205 |
# File 'lib/beaker/logger.rb', line 202 def trace *args return unless is_trace? optionally_color CYAN, *args end |
#warn(*args) ⇒ Object
Report a warning message. Will not print unless we are at LOG_LEVELS ‘warn’ or higher. Will pre-pend the message with “Warning: ”.
219 220 221 222 223 |
# File 'lib/beaker/logger.rb', line 219 def warn *args return unless is_warn? strings = args.map {|msg| "Warning: #{msg}" } optionally_color YELLOW, strings end |