= Improved Logger Proxy for Merb
An improved version of the logging proxy injector for Merb for custom and verbose logging.
= Improved Logger Proxy for Merb
An improved version of the logging proxy injector for Merb for custom and verbose logging.
### BELONGS IN config/init.rb | |
# | |
# ==== Set up your basic configuration | |
# | |
LoggerProxy.setup Logger do |logger, (file, level, delimiter, auto_flush)| | |
logger = logger.new(STDOUT) # file, level, delimiter, auto_flush | |
logger.formatter = proc{|s,t,p,m|"%5s [%s] (%s : %s) %s :: %s\n" % [s, t.strftime("%Y-%m-%d %H:%M:%S"), $$, Thread.current.object_id, p, m]} | |
logger.level = Logger.const_get(level.to_s.upcase.to_sym) | |
logger.progname = "ScoutMerb" | |
logger | |
end | |
### BELINGS IN lib/logger_proxy.rb | |
############## | |
### Logger ### | |
############## | |
require 'logger' | |
class Logger | |
def flush(*args) | |
return | |
end | |
def <<(string = nil) | |
self.info(string) | |
end | |
alias :push :<< | |
%w(debug info warn error fatal).each do |level| | |
eval <<-"end;" | |
def #{level}!(*args) | |
send(:#{level}, *args) | |
end | |
end; | |
end | |
end | |
#################### | |
### Logger Proxy ### | |
#################### | |
class LoggerProxy | |
attr_accessor :logger | |
def initialize(*args) | |
@logger = self.class.initializer.call(self.class.logger, args) | |
end | |
def method_missing(name, *args) | |
self.logger.send(name, *args) | |
end | |
class << self | |
attr_accessor :logger, :initializer | |
def setup(logger, &initializer) | |
self.logger = logger | |
self.initializer = initializer | |
end | |
end | |
end | |
##################### | |
### Install Proxy ### | |
##################### | |
# Sets the Proxy's logger to the default Merb::Logger | |
LoggerProxy.logger = Merb.send(:remove_const, :Logger) | |
# Merb::Logger.new(Merb.file, Merb::Config[:level], Merb::Config[:delimiter], Merb::Config[:auto_flush]) | |
LoggerProxy.initializer = lambda do |logger, (file, level, delimiter, auto_flush)| | |
logger.new(file, level, delimiter, auto_flush) | |
end | |
# Sets the Merb::Logger to the LoggerProxy | |
Merb::Logger = LoggerProxy | |