Class: Timber::LogEntry

Inherits:
Object
  • Object
show all
Defined in:
lib/timber/log_entry.rb

Overview

Represents a new log entry into the log. This is an intermediary class between Logger and the log device that you set it up with.

Constant Summary collapse

DT_PRECISION =

:nodoc:

6.freeze
SCHEMA =
"https://raw.githubusercontent.com/timberio/log-event-json-schema/1.2.4/schema.json".freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(level, time, progname, message, context_snapshot, event, options = {}) ⇒ LogEntry

Creates a log entry suitable to be sent to the Timber API.

Parameters:

  • severity (Integer)

    the log level / severity

  • time (Time)

    the exact time the log message was written

  • progname (String)

    the progname scope for the log message

  • message (String)

    Human readable log message.

  • context_snapshot (Hash)

    structured data representing a snapshot of the context at the given point in time.

  • event (Timber.Event)

    structured data representing the log line event. This should be an instance of Timber.Event.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/timber/log_entry.rb', line 20

def initialize(level, time, progname, message, context_snapshot, event, options = {})
  @level = level
  @time = time.utc
  @progname = progname
  @message = message
  @tags = options[:tags]
  @time_ms = options[:time_ms]

  context_snapshot = {} if context_snapshot.nil?
  system_context = Contexts::System.new(pid: Process.pid)
  context_snapshot[system_context.keyspace] = system_context.as_json

  @context_snapshot = context_snapshot
  @event = event
end

Instance Attribute Details

#context_snapshotObject (readonly)

Returns the value of attribute context_snapshot.



8
9
10
# File 'lib/timber/log_entry.rb', line 8

def context_snapshot
  @context_snapshot
end

#eventObject (readonly)

Returns the value of attribute event.



8
9
10
# File 'lib/timber/log_entry.rb', line 8

def event
  @event
end

#levelObject (readonly)

Returns the value of attribute level.



8
9
10
# File 'lib/timber/log_entry.rb', line 8

def level
  @level
end

#messageObject (readonly)

Returns the value of attribute message.



8
9
10
# File 'lib/timber/log_entry.rb', line 8

def message
  @message
end

#prognameObject (readonly)

Returns the value of attribute progname.



8
9
10
# File 'lib/timber/log_entry.rb', line 8

def progname
  @progname
end

#tagsObject (readonly)

Returns the value of attribute tags.



8
9
10
# File 'lib/timber/log_entry.rb', line 8

def tags
  @tags
end

#timeObject (readonly)

Returns the value of attribute time.



8
9
10
# File 'lib/timber/log_entry.rb', line 8

def time
  @time
end

#time_msObject (readonly)

Returns the value of attribute time_ms.



8
9
10
# File 'lib/timber/log_entry.rb', line 8

def time_ms
  @time_ms
end

Instance Method Details

#as_json(options = {}) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/timber/log_entry.rb', line 36

def as_json(options = {})
  options ||= {}
  hash = {:level => level, :dt => formatted_dt, :message => message, :tags => tags,
    :time_ms => time_ms}

  if !event.nil?
    hash[:event] = event
  end

  if !context_snapshot.nil? && context_snapshot.length > 0
    hash[:context] = context_snapshot
  end

  hash[:"$schema"] = SCHEMA

  hash = if options[:only]
    hash.select do |key, _value|
      options[:only].include?(key)
    end
  elsif options[:except]
    hash.select do |key, _value|
      !options[:except].include?(key)
    end
  else
    hash
  end

  Util::Hash.compact(hash)
end

#to_json(options = {}) ⇒ Object



66
67
68
# File 'lib/timber/log_entry.rb', line 66

def to_json(options = {})
  as_json(options).to_json
end

#to_msgpack(*args) ⇒ Object



70
71
72
# File 'lib/timber/log_entry.rb', line 70

def to_msgpack(*args)
  as_json.to_msgpack(*args)
end