Skip to main content

src/aws@internal@log.erl

-module(aws@internal@log).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/aws/internal/log.gleam").
-export([debug/1, warning/1, error/1]).

-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.

?MODULEDOC(
    " Leveled logging for the SDK runtime.\n"
    "\n"
    " Quiet by default, a firehose on demand (see `PHILOSOPHY.md` and the\n"
    " `Logging` section of `RULES.md`). The SDK says nothing on the happy\n"
    " path and only what an operator must see when something fails; turn the\n"
    " logger up to `debug` and it narrates both paths in full.\n"
    "\n"
    " This is a thin pass-through to OTP `logger` (via `aws_log_ffi`) — the\n"
    " idiomatic BEAM mechanism, mirroring how the AWS Rust SDK leaves the sink\n"
    " to the application. There is no SDK-specific level knob: the operator\n"
    " configures verbosity and destination the standard way.\n"
    "\n"
    "   - Levels — the logger's primary level gates everything. It defaults to\n"
    "     `notice`, under which `error` and `warning` are shown and `debug` is\n"
    "     hidden. Turn on the firehose with, e.g.,\n"
    "     `logger:set_primary_config(level, debug)` or a `kernel` `sys.config`\n"
    "     entry. (Per-module control via `logger:set_module_level/2` also works\n"
    "     — SDK events are emitted from the `aws_log_ffi` module.)\n"
    "   - Destination — the logger's handler decides. The default handler writes\n"
    "     to standard_io (stdout); point it elsewhere (e.g. `standard_error`) via\n"
    "     the handler config if you prefer. The SDK installs no handler of its\n"
    "     own, so its lines pick up the host's formatter and routing.\n"
).

-file("src/aws/internal/log.gleam", 27).
?DOC(
    " Log at `debug` — the firehose, off unless the logger level is `debug`.\n"
    " The message is a thunk so its (often expensive) construction is skipped\n"
    " entirely when debug is not enabled.\n"
).
-spec debug(fun(() -> binary())) -> nil.
debug(Message) ->
    aws_log_ffi:emit_debug(Message).

-file("src/aws/internal/log.gleam", 33).
?DOC(
    " Log at `warning` — notable but recovered (a retry fired, a credential\n"
    " provider was configured but failed). On by default (outranks `notice`).\n"
).
-spec warning(binary()) -> nil.
warning(Message) ->
    aws_log_ffi:emit_warning(Message).

-file("src/aws/internal/log.gleam", 40).
?DOC(
    " Log at `error` — unrecoverable, operator-must-see (credential chain\n"
    " exhausted, retries exhausted, the Lambda Runtime API gone fatal). Sparse,\n"
    " and on by default (outranks `notice`).\n"
).
-spec error(binary()) -> nil.
error(Message) ->
    aws_log_ffi:emit_error(Message).