Sha256: ff19f8131fa67de7a3f2ffe6563ba375e7be2b18380e22fbe86fa4e1a6ba30aa

Contents?: true

Size: 1.54 KB

Versions: 2

Compression:

Stored size: 1.54 KB

Contents

module Logtail
  # The Logtail Logger behaves exactly like the standard Ruby `::Logger`, except that it supports a
  # transparent API for logging structured data and events.
  #
  # @example Basic logging
  #   logger.info "Payment rejected for customer #{customer_id}"
  #
  # @example Logging an event
  #   logger.info "Payment rejected", payment_rejected: {customer_id: customer_id, amount: 100}
  class Logger < ::Logger
    include ::ActiveSupport::LoggerThreadSafeLevel if defined?(::ActiveSupport::LoggerThreadSafeLevel)

    if defined?(::ActiveSupport::LoggerSilence)
      include ::ActiveSupport::LoggerSilence
    elsif defined?(::LoggerSilence)
      include ::LoggerSilence
    end

    def self.create_logger(*io_devices_and_loggers)
      logger = Logtail::Logger.new(*io_devices_and_loggers)

      tagged_logging_supported = Rails::VERSION::MAJOR >= 7 || Rails::VERSION::MAJOR == 6 && Rails::VERSION::MINOR >= 1
      logger = ::ActiveSupport::TaggedLogging.new(logger) if tagged_logging_supported

      logger
    end

    def self.create_default_logger(source_token)
      if ENV['LOGTAIL_SKIP_LOGS'].blank? && !Rails.env.test?
        io_device = Logtail::LogDevices::HTTP.new(source_token)
      else
        io_device = STDOUT
      end

      logger = self.create_logger(io_device)

      if defined?(Sidekiq)
        Sidekiq.configure_server do |config|
          logger = self.create_logger(io_device, config.logger) if config.logger.class == Sidekiq::Logger
          config.logger = logger
        end
      end

      logger
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
logtail-rails-0.2.4 lib/logtail-rails/logger.rb
logtail-rails-0.2.3 lib/logtail-rails/logger.rb