From d723cb2fb22e185edbcade73d96b3cef9537950b Mon Sep 17 00:00:00 2001 From: Jonathan Rochkind Date: Wed, 15 Apr 2020 12:33:28 -0400 Subject: [PATCH] Switch to Module#prepend to patch stdlib Logger instead of older style alias_method chain juggling. We hope this has fewer poor interactions with other things patching Logger as in #60. And it's just a more modern cleaner style. Could be a first step to making this stdlib Logger patching optional, but does not require that. --- lib/core_ext/logger.rb | 17 ----------------- lib/yell.rb | 6 +++++- lib/yell/stdlib_log_wrapper.rb | 12 ++++++++++++ 3 files changed, 17 insertions(+), 18 deletions(-) delete mode 100644 lib/core_ext/logger.rb create mode 100644 lib/yell/stdlib_log_wrapper.rb diff --git a/lib/core_ext/logger.rb b/lib/core_ext/logger.rb deleted file mode 100644 index 5364dd0..0000000 --- a/lib/core_ext/logger.rb +++ /dev/null @@ -1,17 +0,0 @@ -require 'logger' - -class Logger - - def level_with_yell=( level ) - self.level_without_yell= level.is_a?(Yell::Level) ? Integer(level) : level - end - alias_method :level_without_yell=, :level= - alias_method :level=, :level_with_yell= - - def add_with_yell( severity, message = nil, progname = nil, &block ) - add_without_yell(Integer(severity), message, progname, &block) - end - alias_method :add_without_yell, :add - alias_method :add, :add_with_yell - -end diff --git a/lib/yell.rb b/lib/yell.rb index b1fd4d6..e0cc376 100644 --- a/lib/yell.rb +++ b/lib/yell.rb @@ -134,7 +134,11 @@ def __fetch__( hash, *args ) require File.dirname(__FILE__) + '/yell/loggable' # core extensions -require File.dirname(__FILE__) + '/core_ext/logger' +require File.dirname(__FILE__) + '/yell/stdlib_log_wrapper' + +# Patch stdlib ::Logger +require 'logger' +::Logger.prepend(Yell::StdlibLogWrapper) # register known adapters Yell.register :null, Yell::Adapters::Base # adapter that does nothing (for convenience only) diff --git a/lib/yell/stdlib_log_wrapper.rb b/lib/yell/stdlib_log_wrapper.rb new file mode 100644 index 0000000..289a66f --- /dev/null +++ b/lib/yell/stdlib_log_wrapper.rb @@ -0,0 +1,12 @@ +module Yell + # Module intended to be prepended onto ::Logger + module StdlibLogWrapper + def level=(level) + super(level.is_a?(Yell::Level) ? Integer(level) : level) + end + + def add( severity, message = nil, progname = nil, &block ) + super(Integer(severity), message, progname, &block) + end + end +end