class Sapience::Appender::Wrapper

Attributes

logger[R]

Public Class Methods

new(options, &block) click to toggle source

Forward all logging calls to the supplied logging instance.

Parameters

logger: [Object]
  Instance of an existing logger conforming to the Ruby Logger methods.

level: [:trace | :debug | :info | :warn | :error | :fatal]
  Override the log level for this appender.
  Default: Sapience.config.default_level

formatter: [Object|Proc]
  An instance of a class that implements #call, or a Proc to be used to format
  the output from this appender
  Default: Use the built-in formatter (See: #call)

filter: [Regexp|Proc]
  RegExp: Only include log messages where the class name matches the supplied.
  regular expression. All other messages will be ignored.
  Proc: Only include log messages where the supplied Proc returns true
        The Proc must return true or false.

Ruby Logger

require 'logger'
require 'sapience'

ruby_logger = Logger.new(STDOUT)
Sapience.add_appender(:wrapper, logger: ruby_logger)

logger =  Sapience['test']
logger.info('Hello World', some: :payload)

rubocop:disable LineLength

Calls superclass method Sapience::Subscriber::new
# File lib/sapience/appender/wrapper.rb, line 43
def initialize(options, &block)
  # Backward compatibility
  options = { logger: options } unless options.is_a?(Hash)
  options = options.dup
  @logger = options.delete(:logger)

  # Check if the custom appender responds to all the log levels. For example Ruby ::Logger
  if (does_not_implement = LEVELS[1..-1].find { |i| !@logger.respond_to?(i) })
    fail ArgumentError, "Supplied logger does not implement:#{does_not_implement}. It must implement all of #{LEVELS[1..-1].inspect}"
  end

  fail ArgumentError, "Sapience::Appender::Wrapper missing mandatory parameter :logger" unless @logger
  super(options, &block)
end

Public Instance Methods

flush() click to toggle source

Flush all pending logs to disk.

Waits for all sent documents to be writted to disk
# File lib/sapience/appender/wrapper.rb, line 74
def flush
  @logger.flush if @logger.respond_to?(:flush)
end
log(log) click to toggle source

Pass log calls to the underlying Rails, log4j or Ruby logger

trace entries are mapped to debug since :trace is not supported by the
Ruby or Rails Loggers
# File lib/sapience/appender/wrapper.rb, line 66
def log(log)
  return false unless should_log?(log)
  @logger.send(log.level == :trace ? :debug : log.level, formatter.call(log, self))
  true
end
valid?() click to toggle source

rubocop:enable LineLength

# File lib/sapience/appender/wrapper.rb, line 59
def valid?
  !@logger.nil?
end