Sha256: a7dbe721916bde8ee64344110fb999005544fe0c44ff6d56e4607e168f2f22ed

Contents?: true

Size: 1.92 KB

Versions: 10

Compression:

Stored size: 1.92 KB

Contents

# typed: ignore

# Copyright (c) 2015 Sqreen. All Rights Reserved.
# Please refer to our terms for more information: https://www.sqreen.com/terms.html

require 'singleton'
require 'logger'
require 'sqreen/logger'

module Sqreen
  class DeferredLogger
    MAX_ENTRIES = 1000

    Entry = Struct.new(:severity, :message)

    def initialize
      @buffer = StringIO.new
      @logger = ::Logger.new(@buffer)
      @entries = []
      @mutex = Mutex.new
    end

    def debug?
      true
    end

    def info?
      true
    end

    def warn?
      true
    end

    def error?
      true
    end

    def fatal?
      true
    end

    def debug(msg = nil, &block)
      add(::Logger::DEBUG, msg, &block)
    end

    def info(msg = nil, &block)
      add(::Logger::INFO, msg, &block)
    end

    def warn(msg = nil, &block)
      add(::Logger::WARN, msg, &block)
    end

    def error(msg = nil, &block)
      add(::Logger::ERROR, msg, &block)
    end

    def fatal(msg = nil, &block)
      add(::Logger::FATAL, msg, &block)
    end

    def unknown(msg = nil, &block)
      add(::Logger::UNKNOWN, msg, &block)
    end

    def add(severity, msg = nil, &block)
      @mutex.synchronize do
        @entries.shift if @entries.count >= MAX_ENTRIES
        mark = @buffer.pos
        @logger.add(severity, msg, &block)
        @buffer.seek(mark)
        @entries << Entry.new(severity, @buffer.read)
        @buffer.truncate(0)
      end
    end

    def formatter=(value)
      @logger.formatter = value
    end

    def flush_to(logger)
      @mutex.synchronize do
        @entries.each do |entry|
          next if entry.severity < logger.level
          logger.instance_eval { @logdev }.write(entry.message)
        end
        reset
      end
    end

    private

    def reset
      buffer = StringIO.new
      logger = ::Logger.new(buffer)
      logger.formatter = @logger.formatter
      @buffer, @logger, @entries = buffer, logger, []
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
sqreen-1.25.1 lib/sqreen/deferred_logger.rb
sqreen-1.25.0 lib/sqreen/deferred_logger.rb
sqreen-1.24.3 lib/sqreen/deferred_logger.rb
sqreen-1.24.2 lib/sqreen/deferred_logger.rb
sqreen-1.24.1 lib/sqreen/deferred_logger.rb
sqreen-1.24.0 lib/sqreen/deferred_logger.rb
sqreen-1.23.2 lib/sqreen/deferred_logger.rb
sqreen-1.23.1 lib/sqreen/deferred_logger.rb
sqreen-1.23.0 lib/sqreen/deferred_logger.rb
sqreen-1.22.1 lib/sqreen/deferred_logger.rb