class Hanami::Config::Logger

Hanami logger config

@api public @since 2.0.0

Attributes

app_name[R]

@return [Hanami::SliceName]

@api private @since 2.0.0

env[R]

@return [Symbol]

@api private @since 2.0.0

Public Class Methods

new(env:, app_name:) click to toggle source

Returns a new ‘Logger` config.

You should not need to initialize this directly, instead use {Hanami::Config#logger}.

@param env [Symbol] the Hanami env @param app_name [Hanami::SliceName]

@api private

# File lib/hanami/config/logger.rb, line 120
def initialize(env:, app_name:)
  @app_name = app_name
  @env = env

  case env
  when :development, :test
    config.level = :debug
    config.stream = File.join("log", "#{env}.log") if env == :test
    config.logger_constructor = method(:development_logger)
  else
    config.level = :info
    config.formatter = :json
    config.logger_constructor = method(:production_logger)
  end
end

Public Instance Methods

development_logger(_env, app_name, **options) click to toggle source

Build an instance of a development logger

This logger is used in both development and test

@return [Dry::Logger::Dispatcher] @since 2.0.0 @api private

# File lib/hanami/config/logger.rb, line 153
def development_logger(_env, app_name, **options)
  Dry.Logger(app_name, **options) do |setup|
    setup
      .add_backend(log_if: -> entry { !entry.tag?(:rack) })
      .add_backend(formatter: :rack, log_if: -> entry { entry.tag?(:rack) })
  end
end
instance() click to toggle source

Returns a new instance of the logger.

@return [logger_class]

@api public @since 2.0.0

# File lib/hanami/config/logger.rb, line 142
def instance
  logger_constructor.call(env, app_name.name, **logger_constructor_options)
end
production_logger(_env, app_name, **options) click to toggle source

Build an instance of a production logger

This logger is used in both development and test

@return [Dry::Logger::Dispatcher] @since 2.0.0 @api private

# File lib/hanami/config/logger.rb, line 168
def production_logger(_env, app_name, **options)
  Dry.Logger(app_name, **options)
end

Private Instance Methods

logger_constructor_options() click to toggle source

@api private

# File lib/hanami/config/logger.rb, line 175
def logger_constructor_options
  {stream: stream,
    level: level,
    formatter: formatter,
    filters: filters,
    template: template,
    **options}
end
method_missing(name, *args, &block) click to toggle source

@api private

Calls superclass method
# File lib/hanami/config/logger.rb, line 185
def method_missing(name, *args, &block)
  if config.respond_to?(name)
    config.public_send(name, *args, &block)
  else
    super
  end
end
respond_to_missing?(name, _include_all = false) click to toggle source

@api private

Calls superclass method
# File lib/hanami/config/logger.rb, line 194
def respond_to_missing?(name, _include_all = false)
  config.respond_to?(name) || super
end