Sha256: dba49e4f2b888bf2e1a3d6962a69ab680b82d77578251759a0b811ce2451e629
Contents?: true
Size: 1.72 KB
Versions: 5
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
5 entries across 5 versions & 1 rubygems