lib/yell/adapters/io.rb
module Yell #:nodoc:
module Adapters #:nodoc:
class Io < Yell::Adapters::Base
include Yell::Helpers::Formatter
# The possible unix log colors
TTYColors = {
0 => "\033[1;32m", # green
1 => "\033[0m", # normal
2 => "\033[1;33m", # yellow
3 => "\033[1;31m", # red
4 => "\033[1;35m", # magenta
5 => "\033[1;36m", # cyan
-1 => "\033[0m" # normal
}
# Sets the “sync mode” to true or false.
#
# When true (default), every log event is immediately written to the file.
# When false, the log event is buffered internally.
attr_accessor :sync
# Sets colored output on or off (default off)
#
# @example Enable colors
# colors = true
#
# @example Disable colors
# colors = false
attr_accessor :colors
# Shortcut to enable colors.
#
# @example
# colorize!
def colorize!; @colors = true; end
private
# @overload setup!( options )
def setup!( options )
@stream = nil
self.colors = Yell.__fetch__(options, :colors, default: false)
self.formatter = Yell.__fetch__(options, :format, :formatter)
self.sync = Yell.__fetch__(options, :sync, default: true)
super
end
# @overload write!( event )
def write!( event )
message = formatter.call(event)
# colorize if applicable
if colors and color = TTYColors[event.level]
message = color + message + TTYColors[-1]
end
stream.syswrite(message)
super
end
# @overload open!
def open!
@stream.sync = self.sync if @stream.respond_to?(:sync)
@stream.flush if @stream.respond_to?(:flush)
super
end
# @overload close!
def close!
@stream.close if @stream.respond_to?(:close)
@stream = nil
super
end
# The IO stream
#
# Adapter classes should provide their own implementation
# of this method.
def stream
synchronize { open! if @stream.nil?; @stream }
end
# @overload inspectables
def inspectables
super.concat [:formatter, :colors, :sync]
end
end
end
end