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.
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 |
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 177 178 179 180 181 182 |
# File 'lib/beaker/logger.rb', line 166 def convert string if string.kind_of?(Array) string.map do |s| convert s end else if string.respond_to?( :force_encoding ) # We're running in >= 1.9 and we'll need to convert # Remove invalid and undefined UTF-8 character encodings string.force_encoding('UTF-8') return string.chars.select{|i| i.valid_encoding?}.join else # We're running 1.8, do nothing string end end end |
#debug(*args) ⇒ Object
Report a debug message. Will not print unless we are at LOG_LEVELS ‘debug’ or higher.
216 217 218 219 |
# File 'lib/beaker/logger.rb', line 216 def debug *args return unless is_verbose? optionally_color WHITE, *args end |
#error(*args) ⇒ Object
Report an error message. Will always be reported.
257 258 259 |
# File 'lib/beaker/logger.rb', line 257 def error *args optionally_color BRIGHT_RED, *args end |
#get_sublog ⇒ Object
Return the contents of the sublog
304 305 306 307 |
# File 'lib/beaker/logger.rb', line 304 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
188 189 190 191 192 193 |
# File 'lib/beaker/logger.rb', line 188 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.
234 235 236 237 |
# File 'lib/beaker/logger.rb', line 234 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.
249 250 251 252 |
# File 'lib/beaker/logger.rb', line 249 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
274 275 276 277 278 279 280 281 |
# File 'lib/beaker/logger.rb', line 274 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.
198 199 200 201 202 203 |
# File 'lib/beaker/logger.rb', line 198 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
289 290 291 292 |
# File 'lib/beaker/logger.rb', line 289 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
295 296 297 298 299 300 301 |
# File 'lib/beaker/logger.rb', line 295 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)
264 265 266 267 268 |
# File 'lib/beaker/logger.rb', line 264 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.
242 243 244 |
# File 'lib/beaker/logger.rb', line 242 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.
208 209 210 211 |
# File 'lib/beaker/logger.rb', line 208 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: ”.
225 226 227 228 229 |
# File 'lib/beaker/logger.rb', line 225 def warn *args return unless is_warn? strings = args.map {|msg| "Warning: #{msg}" } optionally_color YELLOW, strings end |