Sha256: 5789eb0448b07563c84017f50081a6b2dc72c1b5d255b96fc2b1477f4d206288

Contents?: true

Size: 1.39 KB

Versions: 2

Compression:

Stored size: 1.39 KB

Contents

require 'active_support/buffered_logger'
require 'active_support/core_ext/logger'
require 'fileutils'

module LogjamAgent
  class BufferedLogger < ActiveSupport::BufferedLogger

    attr_accessor :formatter

    def initialize(*args)
      super(*args)
      # stupid bug in the buffered logger code
      @log.write "\n"
      @formatter = lambda{|_, _, _, message| message}
    end

    def start_request(app, env, initial_fields={})
      Thread.current[:logjam_request] = Request.new(app, env, self, initial_fields)
    end

    def finish_request(additional_fields={})
      # puts "finishing request"
      if request = self.request
        request.fields.merge!(additional_fields)
        Thread.current[:logjam_request] = nil
        request.forward
      end
    end

    def request
      Thread.current[:logjam_request]
    end

    def add(severity, message = nil, progname = nil, &block)
      return if @level > severity
      message = (message || (block && block.call) || '').to_s
      time = Time.now
      buffer << formatter.call(severity, time, progname, message) << "\n"
      auto_flush
      if request = self.request
        # puts "adding line to request"
        request.add_line(severity, time, message)
      end
      message
    end

    def logdev=(log_device)
      raise "cannot connect logger to new log device" unless log_device.respond_to?(:write)
      @log = log_device
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
logjam_agent-0.1.3 lib/logjam_agent/buffered_logger.rb
logjam_agent-0.1.2 lib/logjam_agent/buffered_logger.rb