class SysLogger::IO
Public Class Methods
new(&file_creator)
click to toggle source
# File lib/syslogger/io.rb, line 3 def initialize(&file_creator) @file_creator = file_creator @file = nil @connect_pid = Process.pid end
Public Instance Methods
close()
click to toggle source
# File lib/syslogger/io.rb, line 49 def close if !@file.nil? @file.close @file = nil end end
file()
click to toggle source
# File lib/syslogger/io.rb, line 9 def file # re-connect on fork if Process.pid != @connect_pid @file.close end if @file.nil? || @file.closed? @file = @file_creator.call end @file end
flush()
click to toggle source
# File lib/syslogger/io.rb, line 43 def flush if !@file.nil? @file.flush end end
transmit(message)
click to toggle source
# File lib/syslogger/io.rb, line 32 def transmit(message) # UNIXSocket overwrites Object#send, so using file.respond_to?(:send) # does not work. If send and __send__ have different signigutres call # send. Otherwise, call write. unless file.method(:send).hash == file.method(:__send__).hash file.send(message, 0) else file.write(message) end end
write(message)
click to toggle source
# File lib/syslogger/io.rb, line 20 def write(message) tries = 2 Array(message).each do |msg| begin transmit(msg) rescue file.close retry unless (tries -= 1).zero? end end end