Sha256: b645cb3d9922058a808c42a7f6b90e6d9a84a90f2e267bab486f85dd33cda672

Contents?: true

Size: 1.33 KB

Versions: 26

Compression:

Stored size: 1.33 KB

Contents

module Vedeu

  module Logging

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

      # Returns a new instance of Vedeu::Logging::LocklessLogDevice.
      #
      # @param log [void]
      # @return [Vedeu::Logging::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}".freeze)
      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 # Logging

end # Vedeu

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
vedeu-0.8.0 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.7.4 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.7.3 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.7.2 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.7.1 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.7.0 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.6.71 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.6.70 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.6.69 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.6.68 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.6.67 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.6.66 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.6.65 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.6.64 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.6.63 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.6.62 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.6.61 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.6.60 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.6.59 lib/vedeu/logging/lockless_log_device.rb
vedeu-0.6.58 lib/vedeu/logging/lockless_log_device.rb