Sha256: 1c1f20ac52b23765db18456de3c3a62f7dfbad599d83fc154d7e206908fcfd34

Contents?: true

Size: 1.39 KB

Versions: 2

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

require "logger"
require "stringio"
require "json"

require "memolog/version"
require "memolog/config"
require "memolog/init"
require "memolog/logger_extension"
require "memolog/rails_middleware"
require "memolog/sentry_extension"
require "memolog/sidekiq_middleware"

module Memolog
  extend self

  attr_accessor :config

  @config = Memolog::Config.new

  def configure
    yield(config) if block_given?
  end

  def init_middlewares!
    Memolog::Init.init_middlewares!
  end

  def extend_logger(other_logger)
    other_logger.extend(Memolog::LoggerExtension)
  end

  def run
    logdevs.push(StringIO.new)
    logger.instance_variable_set(:@logdev, logdevs.last)

    yield
  ensure
    logdevs.pop unless config.debug
  end

  def add(*args, &block)
    logger.log(*args, &block)
  end

  def dump(parse_json: false)
    return if logdevs.empty?

    beginning = logdevs.last.string.length - config.log_size_limit
    beginning = 0 if beginning.negative?

    dump = logdevs.last.string.slice(beginning, config.log_size_limit).presence

    dump && parse_json ? JSON.parse(dump) : dump
  rescue JSON::ParserError
    dump
  end

  private

  def logger
    storage[:memolog_logger] ||= Logger.new(nil, formatter: config.formatter)
  end

  def logdevs
    storage[:memolog_logdevs] ||= []
  end

  def storage
    config.isolation_level == :fiber ? Fiber : Thread.current
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
memolog-0.5.6 lib/memolog.rb
memolog-0.5.5 lib/memolog.rb