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)

The Proc must return true or false.
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)

Send an error notification to New Relic
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