defmodule EcsElixirCore.Domain.Shared.InternalLogging do
@moduledoc """
Centralized internal logging for the ECS library.
"""
require Logger
@spec log_error(String.t(), module()) :: :ok
def log_error(message, source) when is_binary(message) do
emit("ERROR", message, source)
end
@spec log_warning(String.t(), module()) :: :ok
def log_warning(message, source) when is_binary(message) do
emit("WARNING", message, source)
end
@spec log_debug(String.t(), module()) :: :ok
def log_debug(message, source) when is_binary(message) do
emit("DEBUG", message, source)
end
defp emit(level, message, source) do
json =
Jason.encode!(%{
level: level,
message: message,
source: inspect(source),
timestamp: DateTime.utc_now() |> DateTime.to_iso8601()
})
case level do
"ERROR" -> Logger.error(json)
"WARNING" -> Logger.warning(json)
_ -> Logger.debug(json)
end
:ok
end
end