Skip to content

Instantly share code, notes, and snippets.

@kpumuk
Created February 3, 2011 23:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kpumuk/810483 to your computer and use it in GitHub Desktop.
Save kpumuk/810483 to your computer and use it in GitHub Desktop.
Awesome Ruby feature. Do not use it in real projects!
require 'logger'
class SuperLogger
include Logger::Severity
attr_accessor :level
def initialize(level = INFO)
@level = level || INFO
end
def log?(severity)
@level <= severity
end
def log(message = nil, severity = INFO, _ = (log?(severity) ? message ||= yield : message = nil))
puts message if message
end
end
# Let's try this
logger = SuperLogger.new
logger.log('message info')
logger.log('message debug', Logger::DEBUG)
logger.log { 'block info' }
logger.log('message and block info') { sleep(10); 'block info - never called' }
logger.log(nil, Logger::DEBUG) { sleep(10); 'block debug - never called' }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment