class Sapience::Configuration

rubocop:disable ClassVars

Constants

DEFAULT
SUPPORTED_EXECUTORS

Attributes

ap_options[RW]
app_name[RW]
appenders[RW]
backtrace_level[R]
backtrace_level_index[R]
default_level[R]
error_handler[RW]
filter_parameters[RW]
grape_metrics[RW]
host[W]
log_executor[RW]
metrics[RW]
rails_ac_metrics[RW]
silent_active_record[RW]
silent_rack[RW]
silent_rails[RW]

Public Class Methods

new(options = {}) click to toggle source

Initial default Level for all new instances of Sapience::Logger

# File lib/sapience/configuration.rb, line 32
def initialize(options = {}) # rubocop:disable AbcSize
  fail ArgumentError, "options need to be a hash #{options.inspect}" unless options.is_a?(Hash)
  @options = DEFAULT.merge(options.dup.deep_symbolize_keyz!)
  @options[:log_executor] &&= @options[:log_executor].to_sym
  validate_log_executor!(@options[:log_executor])
  self.default_level     = @options[:log_level].to_sym
  self.backtrace_level   = @options[:log_level].to_sym
  self.host              = @options[:host]
  self.app_name          = @options[:app_name]
  self.ap_options        = @options[:ap_options]
  self.appenders         = @options[:appenders]
  self.log_executor      = @options[:log_executor]
  self.filter_parameters = @options[:filter_parameters]
  self.metrics           = @options[:metrics]
  self.error_handler     = @options[:error_handler]
  self.silent_active_record = @options[:silent_active_record]
  self.silent_rails      = @options[:silent_rails]
  self.silent_rack       = @options[:silent_rack]
  self.rails_ac_metrics  = @options[:rails_ac_metrics]
  self.grape_metrics     = @options[:grape_metrics]
end

Public Instance Methods

backtrace_level=(level) click to toggle source

Sets the level at which backtraces should be captured for every log message.

By enabling backtrace capture the filename and line number of where message was logged can be written to the log file. Additionally, the backtrace can be forwarded to error management services such as Bugsnag.

Warning:

Capturing backtraces is very expensive and should not be done all
the time. It is recommended to run it at :error level in production.
# File lib/sapience/configuration.rb, line 116
def backtrace_level=(level)
  @backtrace_level       = level
  # For performance reasons pre-calculate the level index
  @backtrace_level_index = level.nil? ? 65_535 : level_to_index(level)
end
default_level=(level) click to toggle source

Sets the global default log level

# File lib/sapience/configuration.rb, line 55
def default_level=(level)
  @default_level       = level
  # For performance reasons pre-calculate the level index
  @default_level_index = level_to_index(level)
end
default_level_index() click to toggle source
# File lib/sapience/configuration.rb, line 102
def default_level_index
  Thread.current[:sapience_silence] || @default_level_index
end
fail_with_unkown_log_level!(level) click to toggle source
# File lib/sapience/configuration.rb, line 83
def fail_with_unkown_log_level!(level)
  fail UnkownLogLevel,
    "Invalid level:#{level.inspect} being requested." \
    " Must be one of #{LEVELS.inspect}"
end
host() click to toggle source

Returns [String] name of this host for logging purposes Note: Not all appenders use `host`

# File lib/sapience/configuration.rb, line 124
def host
  @host ||= Socket.gethostname
end
index_to_level(level_index) click to toggle source

Returns the symbolic level for the supplied level index

# File lib/sapience/configuration.rb, line 62
def index_to_level(level_index)
  LEVELS[level_index]
end
level_by_index_or_error(constant) click to toggle source
# File lib/sapience/configuration.rb, line 98
def level_by_index_or_error(constant)
  LEVELS.find_index(constant.downcase.to_sym) || LEVELS.find_index(:error)
end
level_to_index(level) click to toggle source

Internal method to return the log level as an internal index Also supports mapping the ::Logger levels to Sapience levels

# File lib/sapience/configuration.rb, line 68
def level_to_index(level)
  return if level.nil?

  case level
  when Symbol
    LEVELS.index(level)
  when String
    LEVELS.index(level.downcase.to_sym)
  when Integer
    map_levels[level] || fail_with_unkown_log_level!(level)
  else
    fail_with_unkown_log_level!(level)
  end
end
map_levels() click to toggle source

Mapping of Rails and Ruby Logger levels to Sapience levels

# File lib/sapience/configuration.rb, line 90
def map_levels
  return [] unless defined?(::Logger::Severity)
  @@map_levels ||=
    ::Logger::Severity.constants.each_with_object([]) do |constant, levels|
      levels[::Logger::Severity.const_get(constant)] = level_by_index_or_error(constant)
    end
end
validate_log_executor!(log_executor) click to toggle source
# File lib/sapience/configuration.rb, line 128
def validate_log_executor!(log_executor)
  return true if SUPPORTED_EXECUTORS.include?(log_executor)
  fail InvalidLogExecutor, "#{log_executor} is unsupported. Use (#{SUPPORTED_EXECUTORS.join(", ")})"
end