Sha256: afe0429fb5a6367b9c2b16a194891a12e6b9d96e7afa578c375f771533ccfa29

Contents?: true

Size: 1.75 KB

Versions: 2

Compression:

Stored size: 1.75 KB

Contents

# frozen_string_literal: true

require 'logger'
require_relative 'lenjador/adapters'
require_relative 'lenjador/utils'
require_relative 'lenjador/null_logger'
require_relative 'lenjador/preprocessors'

LOG_LEVEL_QUERY_METHODS = %i[debug? info? warn? error? fatal?].freeze

class Lenjador
  def self.build(service_name, loggers_config, preprocessors_config = {})
    loggers_config ||= {stdout: nil}
    preprocessors = preprocessors_config.map do |type, arguments|
      Preprocessors.get(type.to_s, arguments || {})
    end
    adapters = loggers_config.map do |type, arguments|
      Adapters.get(type.to_s, service_name, arguments || {})
    end
    new(adapters, preprocessors)
  end

  def initialize(adapters, preprocessors)
    @adapters = adapters
    @preprocessors = preprocessors
  end

  def debug(*args, &block)
    log :debug, *args, &block
  end

  def info(*args, &block)
    log :info, *args, &block
  end

  def warn(*args, &block)
    log :warn, *args, &block
  end

  def error(*args, &block)
    log :error, *args, &block
  end

  def fatal(*args, &block)
    log :fatal, *args, &block
  end

  LOG_LEVEL_QUERY_METHODS.each do |method|
    define_method(method) do
      @adapters.any? { |adapter| adapter.public_send(method) }
    end
  end

  private

  def log(level, *args, &block)
    data = parse_log_data(*args, &block)
    processed_data = preprocess(data)

    @adapters.each do |adapter|
      adapter.log(level, processed_data)
    end
  end

  def preprocess(data)
    @preprocessors.inject(data) do |data_to_process, preprocessor|
      preprocessor.process(data_to_process)
    end
  end

  def parse_log_data(message = nil, metadata = {}, &block)
    return message if message.is_a?(Hash)

    (metadata || {}).merge(message: block ? yield : message)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
lenjador-1.4.0 lib/lenjador.rb
lenjador-1.3.0 lib/lenjador.rb