module NewRelic::Agent::Instrumentation::Logger
Constants
- INSTRUMENTATION_NAME
Public Class Methods
Source
# File lib/new_relic/agent/instrumentation/logger/instrumentation.rb, line 24 def self.clear_skip_instrumenting(logger) return if logger.frozen? logger.instance_variable_set(:@skip_instrumenting, false) end
Source
# File lib/new_relic/agent/instrumentation/logger/instrumentation.rb, line 42 def self.enabled? NewRelic::Agent.config[:'instrumentation.logger'] != 'disabled' end
Source
# File lib/new_relic/agent/instrumentation/logger/chain.rb, line 7 def self.instrument! ::Logger.class_eval do include NewRelic::Agent::Instrumentation::Logger alias_method(:format_message_without_new_relic, :format_message) def format_message(severity, datetime, progname, msg) format_message_with_tracing(severity, datetime, progname, msg) do format_message_without_new_relic(severity, datetime, progname, msg) end end end end
Source
# File lib/new_relic/agent/instrumentation/logger/instrumentation.rb, line 18 def self.mark_skip_instrumenting(logger) return if logger.frozen? logger.instance_variable_set(:@skip_instrumenting, true) end
We support setting this on loggers which might not have instrumentation installed yet. This lets us disable in AgentLogger
and AuditLogger
without them having to know the inner details.
Public Instance Methods
Source
# File lib/new_relic/agent/instrumentation/logger/instrumentation.rb, line 36 def clear_skip_instrumenting return if frozen? @skip_instrumenting = false end
Source
# File lib/new_relic/agent/instrumentation/logger/chain.rb, line 13 def format_message(severity, datetime, progname, msg) format_message_with_tracing(severity, datetime, progname, msg) do format_message_without_new_relic(severity, datetime, progname, msg) end end
Source
# File lib/new_relic/agent/instrumentation/logger/instrumentation.rb, line 46 def format_message_with_tracing(severity, datetime, progname, msg) formatted_message = yield return formatted_message if skip_instrumenting? begin # It's critical we don't instrument logging from metric recording # methods within NewRelic::Agent, or we'll stack overflow!! mark_skip_instrumenting unless ::NewRelic::Agent.agent.nil? ::NewRelic::Agent.record_instrumentation_invocation(INSTRUMENTATION_NAME) ::NewRelic::Agent.agent.log_event_aggregator.record(formatted_message, severity) formatted_message = LocalLogDecorator.decorate(formatted_message) end formatted_message ensure clear_skip_instrumenting end end
Source
# File lib/new_relic/agent/instrumentation/logger/instrumentation.rb, line 30 def mark_skip_instrumenting return if frozen? @skip_instrumenting = true end
Source
# File lib/new_relic/agent/instrumentation/logger/instrumentation.rb, line 11 def skip_instrumenting? defined?(@skip_instrumenting) && @skip_instrumenting end