Class: Lumberjack::LogEntry
- Inherits:
-
Object
- Object
- Lumberjack::LogEntry
- Defined in:
- lib/lumberjack/log_entry.rb
Overview
A structured representation of a single log entry containing the message, metadata, and contextual information. LogEntry objects are immutable data structures that capture all relevant information about a logging event, including timing, severity, source identification, and custom attributes.
This class serves as the fundamental data structure passed between loggers, formatters, and output devices throughout the Lumberjack logging pipeline. Each entry maintains consistent structure while supporting flexible attribute attachment for contextual logging scenarios.
Constant Summary collapse
- TIME_FORMAT =
"%Y-%m-%dT%H:%M:%S.%3N"
Instance Attribute Summary collapse
-
#attributes ⇒ Hash<String, Object>
Custom attributes associated with the log entry.
-
#message ⇒ String
The primary log message content.
-
#pid ⇒ Integer
The process ID of the logging process.
-
#progname ⇒ String
The name of the program or component that generated the entry.
-
#severity ⇒ Integer
The numeric severity level of the log entry.
-
#time ⇒ Time
The timestamp when the log entry was created.
Instance Method Summary collapse
-
#==(other) ⇒ Boolean
Compare this log entry with another for equality.
-
#[](name) ⇒ Object?
Access an attribute value by name.
-
#as_json ⇒ Hash
Convert the log entry into a hash suitable for JSON serialization.
-
#empty? ⇒ Boolean
Determine if the log entry contains no meaningful content.
-
#initialize(time, severity, message, progname, pid, attributes) ⇒ LogEntry
constructor
Create a new log entry with the specified components.
-
#inspect ⇒ String
Return a string representation suitable for debugging and inspection.
-
#nested_attributes ⇒ Hash
Expand flat attributes with dot notation into a nested hash structure.
-
#nested_tags ⇒ Hash
deprecated
Deprecated.
Use #nested_attributes instead.
-
#severity_data ⇒ Object
Get the data corresponding to the severity.
-
#severity_label ⇒ String
Get the human-readable severity label corresponding to the numeric severity level.
-
#tag(name) ⇒ Hash
deprecated
Deprecated.
Use #[] instead.
-
#tags ⇒ Hash?
deprecated
Deprecated.
Use #attributes instead.
-
#to_s ⇒ String
Generate a formatted string representation of the log entry suitable for human consumption.
Constructor Details
#initialize(time, severity, message, progname, pid, attributes) ⇒ LogEntry
Create a new log entry with the specified components. The entry captures all relevant information about a logging event in a structured format.
39 40 41 42 43 44 45 46 |
# File 'lib/lumberjack/log_entry.rb', line 39 def initialize(time, severity, , progname, pid, attributes) @time = time @severity = (severity.is_a?(Integer) ? severity : Severity.label_to_level(severity)) @message = @progname = progname @pid = pid @attributes = flatten_attributes(attributes) if attributes.is_a?(Hash) end |
Instance Attribute Details
#attributes ⇒ Hash<String, Object>
Returns Custom attributes associated with the log entry.
26 |
# File 'lib/lumberjack/log_entry.rb', line 26 attr_accessor :time, :message, :severity, :progname, :pid, :attributes |
#message ⇒ String
Returns The primary log message content.
26 |
# File 'lib/lumberjack/log_entry.rb', line 26 attr_accessor :time, :message, :severity, :progname, :pid, :attributes |
#pid ⇒ Integer
Returns The process ID of the logging process.
26 |
# File 'lib/lumberjack/log_entry.rb', line 26 attr_accessor :time, :message, :severity, :progname, :pid, :attributes |
#progname ⇒ String
Returns The name of the program or component that generated the entry.
26 |
# File 'lib/lumberjack/log_entry.rb', line 26 attr_accessor :time, :message, :severity, :progname, :pid, :attributes |
#severity ⇒ Integer
Returns The numeric severity level of the log entry.
26 |
# File 'lib/lumberjack/log_entry.rb', line 26 attr_accessor :time, :message, :severity, :progname, :pid, :attributes |
#time ⇒ Time
Returns The timestamp when the log entry was created.
26 27 28 |
# File 'lib/lumberjack/log_entry.rb', line 26 def time @time end |
Instance Method Details
#==(other) ⇒ Boolean
Compare this log entry with another for equality. Two log entries are considered equal if all their components match exactly.
85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/lumberjack/log_entry.rb', line 85 def ==(other) return true if equal?(other) return false unless other.is_a?(LogEntry) time == other.time && severity == other.severity && == other. && progname == other.progname && pid == other.pid && attributes == other.attributes end |
#[](name) ⇒ Object?
Access an attribute value by name. Supports both simple and nested attribute access using dot notation for hierarchical data structures.
113 114 115 116 117 |
# File 'lib/lumberjack/log_entry.rb', line 113 def [](name) return nil if attributes.nil? AttributesHelper.new(attributes)[name] end |
#as_json ⇒ Hash
Convert the log entry into a hash suitable for JSON serialization. Attributes will be expanded into a nested structure (i.e. { “user.id” => 123 } becomes ‘{ “user” => { “id” => 123 } }). Severities will be converted to their string labels.
163 164 165 166 167 168 169 170 171 172 |
# File 'lib/lumberjack/log_entry.rb', line 163 def as_json { "time" => time, "severity" => severity_label, "message" => , "progname" => progname, "pid" => pid, "attributes" => Utils.(attributes) } end |
#empty? ⇒ Boolean
Determine if the log entry contains no meaningful content. An entry is considered empty if it has no message content and no attributes.
154 155 156 |
# File 'lib/lumberjack/log_entry.rb', line 154 def empty? (.nil? || == "") && (attributes.nil? || attributes.empty?) end |
#inspect ⇒ String
Return a string representation suitable for debugging and inspection.
76 77 78 |
# File 'lib/lumberjack/log_entry.rb', line 76 def inspect to_s end |
#nested_attributes ⇒ Hash
Expand flat attributes with dot notation into a nested hash structure. Attributes containing dots in their names are converted into hierarchical nested hashes for structured data representation.
135 136 137 |
# File 'lib/lumberjack/log_entry.rb', line 135 def nested_attributes Utils.(attributes) end |
#nested_tags ⇒ Hash
Use #nested_attributes instead.
Alias for nested_attributes to provide API compatibility with version 1.x. This method will eventually be removed.
144 145 146 147 148 |
# File 'lib/lumberjack/log_entry.rb', line 144 def Utils.deprecated("LogEntry#nested_tags", "Lumberjack::LogEntry#nested_tags is deprecated and will be removed in version 2.1; use nested_attributes instead.") do nested_attributes end end |
#severity_data ⇒ Object
Get the data corresponding to the severity. This include variations on the severity label.
56 57 58 |
# File 'lib/lumberjack/log_entry.rb', line 56 def severity_data Severity.data(severity) end |
#severity_label ⇒ String
Get the human-readable severity label corresponding to the numeric severity level.
51 52 53 |
# File 'lib/lumberjack/log_entry.rb', line 51 def severity_label severity_data.label end |
#tag(name) ⇒ Hash
Use #[] instead.
Alias method for #[] to provide backward compatibility with version 1.x API. This method will eventually be removed.
124 125 126 127 128 |
# File 'lib/lumberjack/log_entry.rb', line 124 def tag(name) Utils.deprecated("LogEntry#tag", "Lumberjack::LogEntry#tag is deprecated and will be removed in version 2.1; use [] instead.") do self[name] end end |
#tags ⇒ Hash?
Use #attributes instead.
Alias for tags to provide backward compatibility with version 1.x API. This method will eventually be removed.
102 103 104 105 106 |
# File 'lib/lumberjack/log_entry.rb', line 102 def Utils.deprecated("LogEntry#tags", "Lumberjack::LogEntry#tags is deprecated and will be removed in version 2.1; use attributes instead.") do attributes end end |
#to_s ⇒ String
Generate a formatted string representation of the log entry suitable for human consumption. Includes timestamp, severity, program name, process ID, attributes, and the main message.
65 66 67 68 69 70 71 |
# File 'lib/lumberjack/log_entry.rb', line 65 def to_s msg = +"[#{time.strftime(TIME_FORMAT)} #{severity_label} #{progname}(#{pid})] #{}" attributes&.each do |key, value| msg << " [#{key}:#{value}]" end msg end |