Sha256: a5cac5f0f2bd3705f784aa0085135623fc34473a526169bf02e0aa961a00c94c

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true

require 'logger'
require 'singleton'
require 'svcbase/formatter'

# define our own custom logger
module Core
  # our logger
  class Logger < ::Logger
    include Singleton
    def initialize
      super($stdout)
      self.formatter = Core::Formatters::Log.new
    end

    def none(*_unused)
      # intentional no-op.  Sequel will log things at a defined log level
      # but we want to be able to log long-running queries without logging
      # ALL of them.  this gives us a method to /dev/zero messages for fast
      # queries
    end
  end

  # truncate long parameters, mask password
  class ParamFilter
    def filter(paramhash, maskkeys)
      paramhash.each do |key, value|
        next paramhash[key] = '*' if maskkeys&.include?(key.to_sym)

        case value
        when String
          paramhash[key] = "#{value[1..128]}... (#{value.length})" if value.length > 128
        when Hash, Array
          value = value.to_json.to_s
          paramhash[key] = "#{value[1..128]}... (#{value.length})" if value.length > 128
        end
      end
      paramhash
    end
  end
end

# add a logger method to all objects so that we can access our logger anywhere
class Object
  def log
    Core::Logger.instance
  end

  alias logger log
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
svcbase-0.1.17 lib/svcbase/corelogger.rb