Sha256: 76e953680f6e764c7e4039a214513b807573eaa0331c507b7dc4c4d8f4500618

Contents?: true

Size: 1.53 KB

Versions: 1

Compression:

Stored size: 1.53 KB

Contents

# frozen_string_literal: true

require "dry-configurable"
require "dry/core/extensions"
require "dry/monitor/notifications"

module Dry
  module Monitor
    Notifications.register_event(:sql)

    module SQL
      class Logger
        extend Dry::Core::Extensions
        extend Dry::Configurable

        register_extension(:default_colorizer) do
          require_relative "./colorizers/default"

          module DefaultColorizer
            def colorizer
              @colorizer ||= Colorizers::Default.new(config.theme)
            end
          end

          Logger.include(DefaultColorizer)
        end

        register_extension(:rouge_colorizer) do
          require_relative "./colorizers/rouge"

          module RougeColorizer
            def colorizer
              @colorizer ||= Colorizers::Rouge.new(config.theme)
            end
          end

          Logger.include(RougeColorizer)
        end

        setting :theme
        setting :message_template, default: %(  Loaded %s in %sms %s)

        attr_reader :config, :logger, :template

        load_extensions(:default_colorizer)

        def initialize(logger, config = self.class.config)
          @logger = logger
          @config = config
          @template = config.message_template
        end

        def subscribe(notifications)
          notifications.subscribe(:sql) { |params| log_query(**params) }
        end

        def log_query(time:, name:, query:)
          logger.info template % [name.inspect, time, colorizer.call(query)]
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dry-monitor-0.5.0 lib/dry/monitor/sql/logger.rb