class VidazingLogger::Appenders::LoggingGemAdapter

Uses an appender

@api private @since 0.2.0

Attributes

logging_appender[R]
vidazing_appender[R]

Public Class Methods

new(type:, vidazing_appender:) click to toggle source
# File lib/vidazing_logger/appenders/logging_gem_adapter.rb, line 16
def initialize(type:, vidazing_appender:)
  @vidazing_appender = vidazing_appender

  logging_filter = create_logging_filter
  logging_layout = create_logging_layout

  logging_appender_options = create_logging_appender_options \
    filter: logging_filter,
    layout: logging_layout

  @logging_appender = create_logging_appender \
    type: type,
    name: vidazing_appender.name,
    options: logging_appender_options
end

Private Class Methods

rolling_file(vidazing_appender:) click to toggle source
# File lib/vidazing_logger/appenders/logging_gem_adapter.rb, line 106
def rolling_file(vidazing_appender:)
  LoggingGemAdapter.new(type: Type::ID_ROLLING_FILE,
                        vidazing_appender: vidazing_appender)
end
stderr(vidazing_appender:) click to toggle source
# File lib/vidazing_logger/appenders/logging_gem_adapter.rb, line 101
def stderr(vidazing_appender:)
  LoggingGemAdapter.new(type: Type::ID_STDERR,
                        vidazing_appender: vidazing_appender)
end
stdout(vidazing_appender:) click to toggle source
# File lib/vidazing_logger/appenders/logging_gem_adapter.rb, line 96
def stdout(vidazing_appender:)
  LoggingGemAdapter.new(type: Type::ID_STDOUT,
                        vidazing_appender: vidazing_appender)
end

Private Instance Methods

create_logging_appender(type:, name:, options:) click to toggle source
# File lib/vidazing_logger/appenders/logging_gem_adapter.rb, line 46
def create_logging_appender(type:, name:, options:)
  abort('options are empty!') if options.empty?
  abort("Invalid Type '#{type}'") unless Type.valid_type?(type: type)

  options.unshift(name)

  Logging.appenders.public_send(type, *options)
  Logging.appenders[name]
end
create_logging_appender_options(filter:, layout:) click to toggle source
# File lib/vidazing_logger/appenders/logging_gem_adapter.rb, line 34
def create_logging_appender_options(filter:, layout:)
  [
    filters: filter,
    layout: layout,
    # These are specific to Appenders::Type.rolling_file
    # But the underlying logging library uses opts.fetch
    # So these will be ignored for other appenders types
    age: 'daily',
    keep: 7
  ]
end
create_logging_color_scheme() click to toggle source
# File lib/vidazing_logger/appenders/logging_gem_adapter.rb, line 78
def create_logging_color_scheme
  color_scheme = @vidazing_appender.color_scheme
  name = color_scheme.name

  # Logging holds the color scheme reference
  Logging.color_scheme(name, color_scheme.scheme)

  name
end
create_logging_filter() click to toggle source
# File lib/vidazing_logger/appenders/logging_gem_adapter.rb, line 56
def create_logging_filter # rubocop:disable Metrics/MethodLength
  # Logging::Filters::Level takes *levels as its argument.
  # This means we can't store the method arguments ahead of time
  # in an array and directly pass those.
  #
  # Instead, to isolate the Logging gem reference, we hack
  level0, level1, level2, level3, level4 =
    *@vidazing_appender.filter_levels

  if level1.nil?
    Logging::Filters::Level.new(level0)
  elsif level2.nil?
    Logging::Filters::Level.new(level0, level1)
  elsif level3.nil?
    Logging::Filters::Level.new(level0, level1, level2)
  elsif level4.nil?
    Logging::Filters::Level.new(level0, level1, level2, level3)
  else
    Logging::Filters::Level.new(:all)
  end
end
create_logging_layout() click to toggle source
# File lib/vidazing_logger/appenders/logging_gem_adapter.rb, line 88
def create_logging_layout
  color_scheme_name = create_logging_color_scheme
  layout = LayoutPattern.colored(color_scheme_name).layout

  Logging.layouts.pattern layout
end