98 lines
2.3 KiB
Ruby
98 lines
2.3 KiB
Ruby
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
|
|
|