Skip to content

Instantly share code, notes, and snippets.

@mtodd
Created September 25, 2008 21:43
Show Gist options
  • Save mtodd/12951 to your computer and use it in GitHub Desktop.
Save mtodd/12951 to your computer and use it in GitHub Desktop.

= 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment