Class: Logtail::LogEntry

Inherits:
Object
  • Object
show all
Defined in:
lib/logtail/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

BINARY_LIMIT_THRESHOLD =

:nodoc:

1_000.freeze
DT_PRECISION =
6.freeze
MESSAGE_MAX_BYTES =
8192.freeze
LOGTAIL_GEM_REGEX =
/\/logtail(?:-ruby|-rails|-rack)?(?:-\d+(?:\.\d+)*)?\/lib$/.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 Logtail API.

Parameters:

  • level (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 (Logtail.Event)

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



29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/logtail/log_entry.rb', line 29

def initialize(level, time, progname, message, context_snapshot, event, options = {})
  @level = level
  @time = time.utc
  @progname = progname

  # If the message is not a string we call inspect to ensure it is a string.
  # This follows the default behavior set by ::Logger
  # See: https://github.com/ruby/ruby/blob/trunk/lib/logger.rb#L615
  @message = message.is_a?(String) ? message : message.inspect
  @message = @message.byteslice(0, MESSAGE_MAX_BYTES)
  @tags = options[:tags]
  @context_snapshot = context_snapshot
  @event = event
end

Instance Attribute Details

#context_snapshotObject (readonly)

Returns the value of attribute context_snapshot.



17
18
19
# File 'lib/logtail/log_entry.rb', line 17

def context_snapshot
  @context_snapshot
end

#eventObject (readonly)

Returns the value of attribute event.



17
18
19
# File 'lib/logtail/log_entry.rb', line 17

def event
  @event
end

#levelObject (readonly)

Returns the value of attribute level.



17
18
19
# File 'lib/logtail/log_entry.rb', line 17

def level
  @level
end

#messageObject (readonly)

Returns the value of attribute message.



17
18
19
# File 'lib/logtail/log_entry.rb', line 17

def message
  @message
end

#prognameObject (readonly)

Returns the value of attribute progname.



17
18
19
# File 'lib/logtail/log_entry.rb', line 17

def progname
  @progname
end

#tagsObject (readonly)

Returns the value of attribute tags.



17
18
19
# File 'lib/logtail/log_entry.rb', line 17

def tags
  @tags
end

#timeObject (readonly)

Returns the value of attribute time.



17
18
19
# File 'lib/logtail/log_entry.rb', line 17

def time
  @time
end

Instance Method Details

#inspectObject



82
83
84
# File 'lib/logtail/log_entry.rb', line 82

def inspect
  to_s
end

#to_hash(options = {}) ⇒ Object

Builds a hash representation containing simple objects, suitable for serialization (JSON).



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/logtail/log_entry.rb', line 45

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

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

  if !event.nil?
    hash.merge!(event)
  end

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

  hash[:context] ||= {}
  hash[:context][:runtime] ||= {}
  hash[:context][:runtime].merge!(current_runtime_context || {})

  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
end

#to_json(options = {}) ⇒ Object



86
87
88
# File 'lib/logtail/log_entry.rb', line 86

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

#to_msgpack(*args) ⇒ Object



90
91
92
# File 'lib/logtail/log_entry.rb', line 90

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

#to_sObject

This is used when LogEntry objects make it to a non-Logtail logger.



95
96
97
# File 'lib/logtail/log_entry.rb', line 95

def to_s
  message + "\n"
end