Created
February 10, 2015 22:44
-
-
Save numericillustration/5936f711c74b351096ae to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
require 'logger/colors' | |
class MultiLogger | |
def initialize(*targets) | |
@targets = targets | |
end | |
%w(debug info warn error fatal unknown).each do |m| | |
define_method(m) do |*args| | |
@targets.map { |t| t.send(m, *args) } | |
end | |
end | |
end | |
def capture_io | |
require 'stringio' | |
# clone whats there currently | |
orig_stdout, orig_stderr = $stdout, $stderr | |
# open new io objects | |
captured_stdout, captured_stderr = StringIO.new, StringIO.new | |
# reassign stdout and stderr to new io streams | |
$stdout, $stderr = captured_stdout, captured_stderr | |
# yield back to caller so that block uses redirected streams | |
yield | |
# now return the captured stdout and stderr | |
return captured_stdout.string, captured_stderr.string | |
ensure | |
# put that thing back where you found it or so help me | |
$stdout = orig_stdout | |
$stderr = orig_stderr | |
end | |
logpath = '/Users/mike/Documents/quick_scripts' | |
logfile = "#{logpath}/#{File.basename($0)}.log" | |
stderr_log = Logger.new(STDERR) | |
file_log = Logger.new(logfile) | |
stderr_log.level = Logger::INFO | |
stderr_log.formatter = proc { |severity, datetime, progname, msg| | |
"#{datetime} - #{severity} [#{caller[8]}] #{msg}\n" | |
} | |
file_log.level = Logger::DEBUG | |
file_log.formatter = proc { |severity, datetime, progname, msg| | |
"#{datetime} - #{severity} [#{caller[8]}] #{msg}\n" | |
} | |
$logger = MultiLogger.new( stderr_log, file_log ) | |
$logger.debug( "#{$0} - PID #{$$} - Logger is active" ) | |
$logger.debug( "Invoked with options:[#{$*}] - Logger is active" ) | |
puts 'before capturing' | |
s_output, e_output = capture_io { | |
puts "stuff inside a block1" | |
puts "stuff inside a block2" | |
puts "stuff inside a block3" | |
puts "stuff inside a block4" | |
puts "stuff inside a block5" | |
$stderr.puts "stderr stuff inside a block1" | |
$stderr.puts "stderr stuff inside a block2" | |
$stderr.puts "stderr stuff inside a block3" | |
} | |
puts "phew, done being redirected" | |
$logger.debug( "Standard Output should go here #{s_output}" ) | |
$logger.debug( "Standard error should go here #{e_output}" ) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment