meducation/filum

View on GitHub
lib/filum/logger.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'logger'

module Filum
  class Logger < ::Logger


    attr_reader :logfile

    def initialize(logfile, options = {})
      @timings = {}
      @logfile = logfile
      create_log_directory

      super(logfile, shift_age='daily')
      self.formatter = Filum::LogFormatter.new(options)
      self.level = Logger::INFO
    end

    def context_id=(context_id)
      Thread.current[:context_id] = context_id
    end

    def start_timing(label)
      @timings[label] = Time.now
      info("Started timing for #{label} at #{@timings[label]}")
    end

    def end_timing(label)
      finish = Time.now
      if @timings[label]
        info("Stopped timing for #{label} at #{@timings[label]}, #{(finish.to_f - @timings[label].to_f).round(3)}")
        @timings.delete(label)
      else
        info("Stopped timing for #{label} at #{@timings[label]}, no start time found")
      end
    end

    private
    def create_log_directory
      return unless @logfile.is_a?(String)
      dir = File.dirname(@logfile)
      unless File.directory?(dir)
        FileUtils.mkdir_p(dir)
      end
    end
  end
end