class Mu::Logger
Constants
- LEVELS
- MAX_NESTED_LEVELS
Public Class Methods
new(*args)
click to toggle source
# File lib/mu/logger.rb, line 19 def initialize(*args) @logger = create_logger(args) @logger.formatter = if ['colored'].include?(ENV['LOG_FORMAT']) then Mu::Logging::Formatting.colored_format else Mu::Logging::Formatting.json_format end self.level = LEVELS.index(ENV['LOG_LEVEL']) || ::Logger::INFO end
Public Instance Methods
for_event(event)
click to toggle source
# File lib/mu/logger.rb, line 31 def for_event(event) RubyCompatibleLogger.new(event, @logger) end
mask(key)
click to toggle source
# File lib/mu/logger.rb, line 35 def mask(key) key = case key when String /#{key}/ when Symbol /#{key.to_s}/ when Regexp key end mask_keys << key end
Private Instance Methods
const_io_stream?(logger_param)
click to toggle source
Allow STDOUT or STDERR to be explicitly specified
# File lib/mu/logger.rb, line 67 def const_io_stream?(logger_param) logger_param.is_a?(String) && logger_param =~ VALID_RUBY_CONST && Kernel.const_defined?(logger_param) end
create_logger(args)
click to toggle source
# File lib/mu/logger.rb, line 53 def create_logger(args) return ::Logger.new(STDOUT) if args.empty? # Default to STDOUT return args[0] if logger?(args[0]) return ::Logger.new(Kernel.const_get(args[0])) if const_io_stream?(args[0]) ::Logger.new(*args) end
enrich_log_data(data)
click to toggle source
# File lib/mu/logger.rb, line 101 def enrich_log_data(data) data = mask_values(data) prefix_and_flatten_hash(data) end
log_event(method, event, data = {}) { |extra| ... }
click to toggle source
# File lib/mu/logger.rb, line 73 def log_event(method, event, data = {}) extra = { 'event' => event } data.is_a?(Hash) ? extra.merge!(data) : extra['message'] = data if block_given? t0 = now begin yield(extra) rescue Exception => e extra['exception'] = [e.class.name, e.message] raise ensure extra['duration'] = (now - t0) @logger.send(method, enrich_log_data(extra)) end else @logger.send(method, enrich_log_data(extra)) end end
logger?(logger_param)
click to toggle source
# File lib/mu/logger.rb, line 61 def logger?(logger_param) # Allow use of pre-existing Logger logger_param.is_a?(::Logger) end
mask_keys()
click to toggle source
# File lib/mu/logger.rb, line 49 def mask_keys @mask_keys ||= [] end
mask_values(data)
click to toggle source
# File lib/mu/logger.rb, line 106 def mask_values(data) data.each { |k, v| data[k] = v.gsub(/./, '#') if should_mask?(k)} end
method_missing(meth, *args, &block)
click to toggle source
# File lib/mu/logger.rb, line 93 def method_missing(meth, *args, &block) @logger.send(meth, *args, &block) end
now()
click to toggle source
# File lib/mu/logger.rb, line 97 def now Time.now.to_f * 1000 end
prefix_and_flatten_hash(hash, prefix = '', level = 1)
click to toggle source
# File lib/mu/logger.rb, line 117 def prefix_and_flatten_hash(hash, prefix = '', level = 1) if level > MAX_NESTED_LEVELS return { "#{prefix}TRUNCATED" => "data nested deeper than #{MAX_NESTED_LEVELS} levels has been truncated" } end hash.inject({}) do |ret, (k, v)| key = prefix + k.to_s if v && v.is_a?(Hash) then ret.merge(prefix_and_flatten_hash(v, key + '.', level + 1)) else ret.merge(key => v) end end end
should_mask?(key)
click to toggle source
# File lib/mu/logger.rb, line 110 def should_mask?(key) return false unless @mask_keys @mask_keys.find {|maskable| key =~ maskable } end