Sha256: 6989681ad2645ea8b242290cf6788ab3a418d8715d54f9fc9945397cce58441b

Contents?: true

Size: 1.15 KB

Versions: 6

Compression:

Stored size: 1.15 KB

Contents

module Vedeu

  # Ensures we can always write to the log file by creating a lock-less
  # log device.
  #
  class LocklessLogDevice < Logger::LogDevice

    # Returns a new instance of Vedeu::LocklessLogDevice.
    #
    # @param log [void]
    # @return [Vedeu::LocklessLogDevice]
    def initialize(log = nil)
      @dev      = nil
      @filename = nil

      if log.respond_to?(:write) && log.respond_to?(:close)
        @dev = log

      else
        @dev      = open_logfile(log)
        @dev.sync = true
        @filename = log

      end
    end

    # @param message [String]
    # @return [void]
    def write(message)
      @dev.write(message)

    rescue StandardError => exception
      warn("log writing failed. #{exception}")
    end

    # @return [void]
    def close
      @dev.close
    rescue
      nil
    end

    private

    # @param log [String]
    # @return [void]
    def open_logfile(log)
      if FileTest.exist?(log)
        open(log, (File::WRONLY | File::APPEND))

      else
        logdev = open(log, (File::WRONLY | File::APPEND | File::CREAT))
        logdev.sync = true
        logdev

      end
    end

  end # LocklessLogDevice

end # Vedeu

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
vedeu-0.6.7 lib/vedeu/log/lockless_log_device.rb
vedeu-0.6.6 lib/vedeu/log/lockless_log_device.rb
vedeu-0.6.5 lib/vedeu/log/lockless_log_device.rb
vedeu-0.6.4 lib/vedeu/log/lockless_log_device.rb
vedeu-0.6.3 lib/vedeu/log/lockless_log_device.rb
vedeu-0.6.2 lib/vedeu/log/lockless_log_device.rb