Sha256: b350bd9960bb26206b36474b9527fb0d3ca4d5d64fec3db0ac721ffa52771c8d

Contents?: true

Size: 1.72 KB

Versions: 8

Compression:

Stored size: 1.72 KB

Contents

# frozen_string_literal: true

module RailwayIpc
  # Custom logger that accepts a `device`, `level`, and `formatter`.
  # `formatter` can be any object that responds to `call`; a
  # `Logger::Formatter` is used if the argument is not provided.
  #
  # Here is an example formatter that uses `Oj` to format structured log
  # messages:
  #
  # require 'oj'
  # OjFormatter = proc do |severity, datetime, progname, data|
  #   data.merge!(
  #     name: progname,
  #     timestamp: datetime,
  #     severity: severity
  #   )
  #   Oj.dump(data, { mode: :compat, time_format: :xmlschema })
  # end
  #
  # logger = RailwayIpc::Logger.new(STDOUT, Logger::INFO, OjFormatter)
  #
  class Logger
    def initialize(device=$stdout, level=::Logger::INFO, formatter=nil)
      @logger = ::Logger.new(device)
      @logger.level = level
      @logger.formatter = formatter if formatter
    end

    %w[fatal error warn info debug].each do |level|
      define_method(level) do |message=nil, data={}, &block|
        data.merge!(feature: 'railway_ipc') unless data.key?(:feature)
        return logger.send(level, data.merge(message: message)) unless block

        data = message.merge(data) if message.is_a?(Hash)
        data.merge!(message: block.call)

        # This is for compatability w/ Ruby's Logger. Ruby's Logger class
        # assumes that if both a `message` argument and a block are given,
        # that the block contains the actual message. The `message` argument
        # is assumed to be the `progname`.
        #
        # https://github.com/ruby/logger/blob/master/lib/logger.rb#L471
        data.merge!(progname: message) if message.is_a?(String)
        logger.send(level, data)
      end
    end

    private

    attr_reader :logger
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
railway-ipc-5.1.1 lib/railway_ipc/logger.rb
railway-ipc-5.1.0 lib/railway_ipc/logger.rb
railway-ipc-5.0.0 lib/railway_ipc/logger.rb
railway-ipc-4.0.1 lib/railway_ipc/logger.rb
railway-ipc-4.0.0 lib/railway_ipc/logger.rb
railway-ipc-3.0.0 lib/railway_ipc/logger.rb
railway-ipc-2.2.2 lib/railway_ipc/logger.rb
railway-ipc-2.2.1 lib/railway_ipc/logger.rb