class LogToolbox::LogrageConfig

Constants

LOGSTASH_BUFFER_MAX_INTERVAL
LOGSTASH_BUFFER_MAX_ITEMS
LOGSTASH_PORT
LOGSTASH_PROTOCOL
LOGSTASH_URL

Attributes

config[RW]

Public Class Methods

configure() click to toggle source
# File lib/log_toolbox/lograge_config.rb, line 16
def self.configure
  Rails.application.configure do
    log_config = LogToolbox::LogrageConfig.new(config)
    log_config.configure_log_format
    if %w[development test].include?(ENV['RAILS_ENV'])
      log_config.configure_log_output_stdout
    else
      log_config.configure_log_output_logstash
    end
  end
end
new(config) click to toggle source
# File lib/log_toolbox/lograge_config.rb, line 28
def initialize(config)
  @config = config
end

Public Instance Methods

configure_log_format() click to toggle source

rubocop:disable Metrics/AbcSize,Metrics/MethodLength

# File lib/log_toolbox/lograge_config.rb, line 49
def configure_log_format
  config.lograge.enabled = true
  config.lograge.base_controller_class = 'ActionController::API'
  config.lograge.formatter = Lograge::Formatters::Json.new

  config.lograge.custom_options = lambda do |event|
    {
      event_at: event.payload[:event_at],
      parameters: event.payload[:params].to_json,
      level: 'INFO',
      service_name: event.payload[:service_name] || LogUtil.system_service_name,
      version: event.payload[:version],
      origin_ipv4: event.payload[:origin_ipv4],
      destination_ipv4: event.payload[:destination_ipv4],
      username: wso2_user_name(event.payload[:headers][:HTTP_USER_IDENTIFIER])
    }
  end
end
configure_log_output_logstash() click to toggle source
# File lib/log_toolbox/lograge_config.rb, line 32
def configure_log_output_logstash
  config.logstash.type = LOGSTASH_PROTOCOL
  config.logstash.host = LOGSTASH_URL
  config.logstash.port = LOGSTASH_PORT
  config.logstash.buffer_max_items = LOGSTASH_BUFFER_MAX_ITEMS
  config.logstash.buffer_max_interval = LOGSTASH_BUFFER_MAX_INTERVAL
end
configure_log_output_stdout() click to toggle source
# File lib/log_toolbox/lograge_config.rb, line 40
def configure_log_output_stdout
  return unless ENV['RAILS_LOG_TO_STDOUT'].present?

  logger           = ActiveSupport::Logger.new($stdout)
  logger.formatter = config.log_formatter
  config.logger    = ActiveSupport::TaggedLogging.new(logger)
end
wso2_user_name(http_user_identifier) click to toggle source

rubocop:enable Metrics/AbcSize,Metrics/MethodLength

# File lib/log_toolbox/lograge_config.rb, line 69
def wso2_user_name(http_user_identifier)
  return nil unless http_user_identifier.is_a? String

  http_user_identifier ? JSON.parse(Base64.decode64(http_user_identifier))['user_name'] : nil
end