This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user