Current section

Files

Jump to
significa_utils lib logger_metadata.ex
Raw

lib/logger_metadata.ex

defmodule SignificaUtils.LoggerMetadata do
@moduledoc """
Utility for managing logger metadata in various contexts.
Provides functions to set logger metadata for improved consistent metadata across logging
and error tracking.
"""
require Logger
@doc """
Sets logger metadata, if Sentry is available also sets Sentry extra context.
## Parameters
- metadata: A keyword list of metadata key-value pairs
## Examples
iex> SignificaUtils.LoggerMetadata.set_metadata(request_id: "abc123", user_id: 456)
:ok
"""
def set_metadata(metadata) do
Logger.metadata(metadata)
quote do
if Code.ensure_loaded?(Sentry.Context) do
unquote(Sentry.Context.set_extra_context(Map.new(metadata)))
end
end
:ok
end
if Code.ensure_loaded?(Oban.Job) do
@doc """
Sets up logger metadata for an Oban job.
Takes a job struct with id and worker fields and sets the logger metadata
with the job_id and worker name.
## Examples
iex> job = %Oban.Job{id: 123, worker: "SampleApp.ExampleWorker"}
iex> SignificaUtils.LoggerMetadata.set_oban_job_metadata(job)
:ok
"""
def set_oban_job_metadata(
%Oban.Job{id: job_id, worker: worker},
extra \\ []
) do
[
job_id: job_id,
worker: worker
]
|> Keyword.merge(extra)
|> set_metadata()
end
end
end