Sha256: 30084eddfaf7d7011fcc98047d823f7f7ec1e00448386d57cb78adc484dd23af

Contents?: true

Size: 1.75 KB

Versions: 1

Compression:

Stored size: 1.75 KB

Contents

#
# Copyright (c) 2018 Patrick Thomas.  All rights reserved.
#
require 'file-tail'
require 'cayuga/object/constants'
require 'cayuga/object/singleton'
require 'cayuga/tools/loggable'

module Cayuga
  module Object
    class Logger
      extend Singleton
      include Object
      include Tools::Loggable

      def generic_log_file(name)
        "#{factory.logs_directory}/#{name.stringify.filenamify('.log')}"
      end

      def logs
        @logs.keys.freeze
      end

      def log_log(name)
        @logs[name.symbolize]
      end

      alias [] log_log

      def log_log?(name)
        not @logs[name.symbolize].nil?
      end

      def log_log!(name, filename: nil, stream: nil, filter: nil)
        return log_log(name) if log_log?(name)
        log = nil
        log = SemanticLogger.add_appender(file_name: filename, filter: filter) unless filename.nil?
        log = SemanticLogger.add_appender(io: stream, filter: filter) unless stream.nil?
        raise ArgumentError, "no filename or stream for log #{name.stringify}" if log.nil?
        log.name = name.stringify
        @logs[name.symbolize] = filename || stream
      end

      def tail(name, size: 5)
        File.open(log_log(name)) do |log|
          log.extend File::Tail
          log.return_if_eof = true
          log.backward(size).tail(size)
        end
      end

      private_class_method :new

      private

      attr_reader :factory

      def initialize(factory)
        @factory = factory
        @logs = {}
        log_log!(:console, stream: $stderr)
        log_log!(:main, filename: generic_log_file(:main))
        log_log!(self.class, filename: log_file, filter: Regexp.new(self.class.stringify))
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cayuga-0.0.2 lib/cayuga/object/logger.rb