Class: Sapience::Appender::Wrapper

Inherits:
Subscriber show all
Defined in:
lib/sapience/appender/wrapper.rb

Instance Attribute Summary collapse

Attributes inherited from Subscriber

#app_name, #formatter, #host

Attributes inherited from Base

#filter, #log_hooks, #name

Instance Method Summary collapse

Methods inherited from Subscriber

#close, #default_formatter, #level, #name, #to_s

Methods included from Descendants

#descendants

Methods inherited from Base

#app_name, #default_formatter, #fast_tag, #host, #level, #level=, #payload, #pop_tags, #push_tags, #silence, #tagged, #tags, #with_payload

Methods included from LogMethods

#debug, #debug?, #error, #error!, #error?, #fatal, #fatal!, #fatal?, #info, #info?, #level_to_index, #log_with_exception, #log_with_level, #measure, #measure_debug, #measure_error, #measure_fatal, #measure_info, #measure_trace, #measure_warn, #trace, #trace?, #warn, #warn?

Constructor Details

#initialize(options, &block) ⇒ Wrapper

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



43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 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

Instance Attribute Details

#loggerObject (readonly)

Returns the value of attribute logger.



9
10
11
# File 'lib/sapience/appender/wrapper.rb', line 9

def logger
  @logger
end

Instance Method Details

#flushObject

Flush all pending logs to disk.

Waits for all sent documents to be writted to disk


74
75
76
# File 'lib/sapience/appender/wrapper.rb', line 74

def flush
  @logger.flush if @logger.respond_to?(:flush)
end

#log(log) ⇒ Object

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


66
67
68
69
70
# 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?Boolean

rubocop:enable LineLength

Returns:

  • (Boolean)


59
60
61
# File 'lib/sapience/appender/wrapper.rb', line 59

def valid?
  !@logger.nil?
end