class Hedgelog

Constants

BACKTRACE_RE
LEVELS
RESERVED_KEYS
TIMESTAMP_FORMAT
TOP_LEVEL_KEYS
VERSION

Attributes

app[W]
level[R]

Public Class Methods

new(logdev = STDOUT, shift_age = nil, shift_size = nil, cleaner=nil) click to toggle source
# File lib/hedgelog.rb, line 28
def initialize(logdev = STDOUT, shift_age = nil, shift_size = nil, cleaner=nil)
  @level = LEVELS[:debug]
  @channel = nil
  @logdev = nil
  @app = nil
  @scrubber = Hedgelog::Scrubber.new(cleaner)
  @normalizer = Hedgelog::Normalizer.new
  @channel_context = Hedgelog::Context.new(@scrubber, @normalizer)

  if logdev.is_a?(self.class)
    @channel = logdev
  else
    @logdev = Logger::LogDevice.new(logdev, shift_age: shift_age, shift_size: shift_size)
  end
end

Public Instance Methods

[](key) click to toggle source
# File lib/hedgelog.rb, line 70
def [](key)
  @channel_context[key]
end
[]=(key, val) click to toggle source
# File lib/hedgelog.rb, line 66
def []=(key, val)
  @channel_context[key] = val
end
add(severity = LEVELS[:unknown], message = nil, progname = nil, context = {}) { || ... } click to toggle source
# File lib/hedgelog.rb, line 51
def add(severity = LEVELS[:unknown], message = nil, progname = nil, context = {}, &block)
  return true if (@logdev.nil? && @channel.nil?) || severity < @level

  message, context = *yield if block
  context ||= {}

  context = Hedgelog::Context.new(@scrubber, @normalizer, context) unless context.is_a? Hedgelog::Context
  context.merge!(@channel_context)
  context[:message] ||= message

  return write(severity, context) if @logdev

  @channel&.add(severity, nil, progname, context)
end
channel(name) click to toggle source
# File lib/hedgelog.rb, line 82
def channel(name)
  sc = self.class.new(self)
  sc.level = @level
  channel_name = name
  channel_name = "#{self[:channel]} => #{name}" if self[:channel]
  sc[:channel] = channel_name
  sc
end
clear_channel_context() click to toggle source
# File lib/hedgelog.rb, line 78
def clear_channel_context
  @channel_context = {}
end
delete(key) click to toggle source
# File lib/hedgelog.rb, line 74
def delete(key)
  @channel_context.delete(key)
end
formatter() click to toggle source
# File lib/hedgelog.rb, line 119
def formatter
  ::Logger::Formatter.new
end
formatter=(_value) click to toggle source
# File lib/hedgelog.rb, line 123
def formatter=(_value)
  formatter
end
level=(level) click to toggle source
# File lib/hedgelog.rb, line 44
def level=(level)
  int_level = level_to_int(level)
  raise ::ArgumentError, "#{self.class}#level= , #{level} is not a valid level." if int_level.nil?

  @level = int_level
end
silence(temporary_level = LEVELS[:error]) { |self| ... } click to toggle source
# File lib/hedgelog.rb, line 110
def silence(temporary_level = LEVELS[:error])
  old_level = level
  self.level = temporary_level

  yield self
ensure
  self.level = old_level
end

Private Instance Methods

debugharder(callinfo) click to toggle source
# File lib/hedgelog.rb, line 171
        def debugharder(callinfo)
  m = BACKTRACE_RE.match(callinfo)
  return unless m

  path, line, method = m[1..3]
  whence = $LOAD_PATH.find { |p| path.start_with?(p) }
  file = if whence
           # Remove the RUBYLIB path portion of the full file name
           path[whence.length + 1..-1]
         else
           # We get here if the path is not in $:
           path
         end

  {
    file: file,
    line: line,
    method: method
  }
end
default_data(severity) click to toggle source
# File lib/hedgelog.rb, line 154
        def default_data(severity)
  {
    timestamp: Time.now.strftime(TIMESTAMP_FORMAT),
    level_name: level_from_int(severity),
    level: severity
  }
end
extract_top_level_keys(context) click to toggle source
# File lib/hedgelog.rb, line 162
        def extract_top_level_keys(context)
  data = {}
  TOP_LEVEL_KEYS.each do |key|
    data[key] = context.delete(key) if context.key? key
  end
  data[:context] = context
  data
end
level_from_int(level) click to toggle source
# File lib/hedgelog.rb, line 133
        def level_from_int(level)
  return LEVELS[level] if level.is_a?(Integer)

  level.to_sym
end
level_to_int(level) click to toggle source
# File lib/hedgelog.rb, line 127
        def level_to_int(level)
  return level if level.is_a?(Integer)

  LEVELS[level]
end
write(severity, context) click to toggle source
# File lib/hedgelog.rb, line 139
        def write(severity, context)
  return true if @logdev.nil?

  context.normalize!
  context.scrub!

  data = context.merge(default_data(severity))
  data[:app] = @app if @app
  data[:caller] = debugharder(caller(4, 1).first) if debug?
  data = extract_top_level_keys(data)

  @logdev.write(Yajl::Encoder.encode(data) + "\n")
  true
end