Sha256: 8697d1bb286267062fb20f128fa4c022edf765fd62d448d25c95b20582ba31f1

Contents?: true

Size: 1.22 KB

Versions: 2

Compression:

Stored size: 1.22 KB

Contents

module Fasten
  class << self
    attr_accessor :logger
  end

  module Logger
    %w[debug info error].each do |method|
      define_method "log_#{method}" do |msg|
        return unless Fasten.logger.respond_to?(method)

        caller_name = name if respond_to? :name
        caller_name ||= Kernel.binding.of_caller(1).eval('self').class
        Fasten.logger.send(method, caller_name) { msg }
      end
    end

    def log_ini(object, message = nil)
      object.ini ||= Time.new
      log_info "Init #{object.class} #{object} #{message}"
    end

    def log_fin(object, message = nil)
      object.fin ||= Time.new
      object.dif = object.fin - object.ini

      log_info "Done #{object.class} #{object} #{message} in #{object.dif}"
    end

    def redirect_std(path)
      @saved_stdout = $stdout.clone
      @saved_stderr = $stderr.clone

      FileUtils.mkdir_p File.dirname(path)
      log = File.new path, 'a'
      log.sync = true

      $stdout.reopen log
      $stderr.reopen log
    end

    def restore_std
      $stdout.reopen(@saved_stdout)
      $stderr.reopen(@saved_stderr)
    end
  end
end

Fasten.logger ||=
  begin
    Logger.new(STDOUT, level: Logger::DEBUG, progname: $PROGRAM_NAME)
  rescue StandardError
    nil
  end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fasten-0.5.2 lib/fasten/logger.rb
fasten-0.5.0 lib/fasten/logger.rb