1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
# frozen_string_literal: true
require "delegate"
require "dry/logger/constants"
require "dry/logger/backends/core"
module Dry
module Logger
module Backends
# Logger proxy is used for regular loggers that don't work with log entries
#
# @since 1.0.0
# @api private
class Proxy < SimpleDelegator
include Core
LOG_METHODS.each do |method|
define_method(method) do |entry|
if entry.exception?
if __supports_payload__?(method)
__getobj__.public_send(method, entry.exception, **entry.payload.except(:exception))
else
__getobj__.public_send(method, entry.exception)
end
elsif __supports_payload__?(method)
if entry.message
__getobj__.public_send(method, entry.message, **entry.payload)
else
__getobj__.public_send(method, **entry.payload)
end
else
__getobj__.public_send(method, entry.message)
end
end
end
# @since 1.0.2
# @api private
def initialize(backend, **options)
super(backend)
@options = options
self.log_if = @options[:log_if]
end
# @since 1.0.0
# @api private
def log?(entry)
if log_if
log_if.call(entry)
else
true
end
end
private
# @since 1.0.0
# @api private
def __supports_payload__?(method)
__supported_methods__[method] ||= __getobj__.method(method)
.parameters.last&.first.equal?(:keyrest)
end
# @since 1.0.0
# @api private
def __supported_methods__
@__supported_methods__ ||= {}
end
end
end
end
end
|