class SemanticLogger::Appender::NewRelicLogs
def self.log_newrelic(json_message, level)
def self.log_newrelic(json_message, level) ::NewRelic::Agent.agent.log_event_aggregator.record(json_message, level) end
def initialize(formatter: SemanticLogger::Formatters::NewRelicLogs.new, **args, &block)
Proc: Only include log messages where the supplied Proc returns true
regular expression. All other messages will be ignored.
RegExp: Only include log messages where the class name matches the supplied.
filter: [Regexp|Proc]
Default: SemanticLogger::Formatters::NewRelicLogs
the output from this appender
An instance of a class that implements #call, or a Proc to be used to format
formatter: [Object|Proc]
Default: SemanticLogger.default_level
Override the log level for this appender.
level: [:trace | :debug | :info | :warn | :error | :fatal]
Parameters
Create Appender
def initialize(formatter: SemanticLogger::Formatters::NewRelicLogs.new, **args, &block) super end
def log(log)
def log(log) begin message = formatter.call(log, self) # Generate the structured log json_message = message.to_json # Convert the log to JSON level = log.level.to_s.upcase # Determine the log level self.class.log_newrelic(json_message, level) rescue JSON::GeneratorError => e warn("Failed to serialize log message to JSON: #{e.message}") warn("Problematic data: #{message.inspect}") rescue StandardError => e warn("Unexpected error while logging to New Relic: #{e.message}") end true end