= 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 | |