You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

44 lines
1.7 KiB

module SemanticLogger
class Base
# Log message at the specified level
def log_internal(level, index, message = nil, payload = nil, exception = nil)
# Handle variable number of arguments by detecting exception object and payload hash.
if exception.nil? && payload.nil? && message.respond_to?(:backtrace) && message.respond_to?(:message)
exception = message
message = nil
elsif exception.nil? && payload && payload.respond_to?(:backtrace) && payload.respond_to?(:message)
exception = payload
payload = nil
elsif message && !message.is_a?(String)
payload = message
message = 'payload is'
end
log = Log.new(name, level, index)
should_log =
if exception.nil? && payload.nil? && message.is_a?(Hash)
# All arguments as a hash in the message.
log.assign(**log.extract_arguments(message))
elsif exception.nil? && message && payload && payload.is_a?(Hash)
# Message supplied along with a hash with the remaining arguments.
log.assign(**log.extract_arguments(payload, message))
else
# All fields supplied directly.
log.assign(message:, payload:, exception:)
end
# Add result of block to message or payload if not nil
if block_given?
result = yield(log)
if result.is_a?(String)
log.message = log.message.nil? ? result : "#{log.message} -- #{result}"
elsif result.is_a?(Hash)
log.assign_hash(result)
end
end
# Log level may change during assign due to :on_exception_level
self.log(log) if should_log && should_log?(log)
end
end
end