class MultiProcess::Logger
Can create pipes and multiplex pipe content to put into given IO objects e.g. multiple output from multiple processes to current stdout.
Public Class Methods
new(*args)
click to toggle source
Create new logger.
@param out [IO] IO to push formatted output from
default created logger pipes.
@param err [IO] IO to push formatted output from
error sources.
Calls superclass method
# File lib/multi_process/logger.rb, line 14 def initialize(*args) @opts = Hash === args.last ? args.pop : {} @out = args[0] || $stdout @err = args[1] || $stderr @colwidth = 0 super() end
Private Class Methods
global()
click to toggle source
# File lib/multi_process/logger.rb, line 76 def global @global ||= new $stdout, $stderr end
Protected Instance Methods
collapse?()
click to toggle source
# File lib/multi_process/logger.rb, line 45 def collapse? @opts[:collapse].nil? || @opts[:collapse] end
connected(process, _)
click to toggle source
# File lib/multi_process/logger.rb, line 37 def connected(process, _) @colwidth = [process.title.to_s.length, @colwidth].max end
read(pipe)
click to toggle source
# File lib/multi_process/logger.rb, line 41 def read(pipe) pipe.gets end
received(process, name, line)
click to toggle source
# File lib/multi_process/logger.rb, line 26 def received(process, name, line) case name when :err, :stderr output process, line, io: @err, delimiter: 'E>' when :out, :stdout output process, line when :sys output(process, line, delimiter: '$>') if @opts[:sys] end end
Private Instance Methods
output(process, line, opts = {})
click to toggle source
# File lib/multi_process/logger.rb, line 51 def output(process, line, opts = {}) opts[:delimiter] ||= ' |' name = if opts[:name] opts[:name].to_s.dup else if process process.title.to_s.rjust(@colwidth, ' ') else (' ' * @colwidth) end end io = opts[:io] || @out if @last_name == name && collapse? io.print " #{' ' * name.length} #{opts[:delimiter]} " else io.print " #{name} #{opts[:delimiter]} " end io.puts line io.flush @last_name = name end