Class: SemanticLogger::Formatters::NewRelicLogs
- Defined in:
- lib/semantic_logger/formatters/new_relic_logs.rb
Overview
Formatter for reporting to NewRelic’s Logger
New Relic’s logs do not support custom attributes out of the box, and therefore these have to be put into a single JSON serialized string under the message
key.
In particular the following fields of the log object are serialized under the message
key that’s sent to NewRelic:
-
message
-
tags
-
named_tags
-
payload
-
metric
-
metric_amount
-
environment
-
application
New Relic Attributes not Supported
-
thread.id
-
class.name
-
method.name
Reference
-
Logging specification
-
Metadata APIs
Instance Attribute Summary
Attributes inherited from Raw
Attributes inherited from Base
Instance Method Summary collapse
- #call(log, logger) ⇒ Object
-
#initialize(**args) ⇒ NewRelicLogs
constructor
A new instance of NewRelicLogs.
Methods inherited from Raw
#application, #duration, #environment, #exception, #file_name_and_line, #host, #level, #message, #metric, #name, #named_tags, #payload, #pid, #tags, #thread_name, #time
Methods inherited from Base
#backtrace, #fast_tag, #level, #level=, #log, #measure, #named_tags, #pop_tags, #push_tags, #should_log?, #silence, #tagged, #tags
Constructor Details
#initialize(**args) ⇒ NewRelicLogs
Returns a new instance of NewRelicLogs.
49 50 51 52 53 54 |
# File 'lib/semantic_logger/formatters/new_relic_logs.rb', line 49 def initialize(**args) args.delete(:time_key) args.delete(:time_format) super(time_key: :timestamp, time_format: :ms, **args) end |
Instance Method Details
#call(log, logger) ⇒ Object
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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/semantic_logger/formatters/new_relic_logs.rb', line 56 def call(log, logger) hash = super(log, logger) = { message: hash[:message].to_s, tags: hash[:tags] || [], named_tags: hash[:named_tags] || {}, **hash.slice(:metric, :metric_amount, :environment, :application, :payload) } .merge!(duration: hash[:duration_ms]) if hash.key?(:duration_ms) .merge!(duration_human: hash[:duration]) if hash.key?(:duration) result = { **, message: .to_json, timestamp: hash[:timestamp].to_i, "log.level": log.level.to_s.upcase, "logger.name": log.name, "thread.name": log.thread_name.to_s } if hash[:exception] result.merge!( "error.message": hash[:exception][:message], "error.class": hash[:exception][:name], "error.stack": hash[:exception][:stack_trace].join("\n") ) end if hash[:file] result.merge!( "file.name": hash[:file], "line.number": hash[:line].to_s ) end result end |