class Xcflushd::Logger

Public Class Methods

new(*args) click to toggle source
# File lib/xcflushd/logger.rb, line 5
def self.new(*args)
  # Logging to a IO-like object.
  #
  # When the IO object is a TTY, Ruby sets line buffered mode, which is
  # ok for logs. However, when it is not a TTY, Ruby sets up a buffer
  # of unspecified size that causes applications that write few logs to
  # appear as inactive in the log stream. This is a problem when trying
  # to diagnose issues.
  #
  # Unfortunately Ruby only exposes a couple of limited ways to control
  # the underlying buffering: IO#(f)sync and IO#flush. Apparently the C
  # runtime stdio buffering is replaced by Ruby's own, so there is no
  # point in trying to call setvbuf, and no point either in trying to
  # control a TTY, since that case is fine.
  #
  # Since our logging stream activity is fairly low it's reasonable to
  # use IO#sync for the non TTY case to have (hopefully) a behaviour
  # similar to line-buffered standard I/O.
  #
  # More info on http://tuxdna.in/files/notes/ruby-io.html.
  #
  io = args[0]
  io.sync = true unless io.tty?
  ::Logger.new(*args)
end