Skip to content

ant_ai.core.logging

configure_logging

configure_logging(
    *, level: str | None = None, json: bool | None = None
) -> None

Configure loguru sinks once at process startup.

Uses the following environment variables:

  • LOG_LEVEL: Log level (default: INFO)
  • LOG_JSON: Set to "1" for JSON output

Parameters:

Name Type Description Default
level str | None

description. Defaults to None.

None
json bool | None

description. Defaults to None.

None
Source code in src/ant_ai/core/logging.py
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
def configure_logging(*, level: str | None = None, json: bool | None = None) -> None:
    """
    Configure loguru sinks once at process startup.

    Uses the following environment variables:

    - LOG_LEVEL: Log level (default: INFO)
    - LOG_JSON: Set to "1" for JSON output

    Args:
        level: _description_. Defaults to None.
        json: _description_. Defaults to None.
    """
    _level: str = level or os.getenv("LOG_LEVEL", "INFO")
    _json: bool = json if json is not None else (os.getenv("LOG_JSON", "0") == "1")

    logger.remove()

    if _json:
        logger.add(
            sys.stdout,
            level=_level,
            serialize=True,  # emits {"text": ..., "record": {...}} per line
            backtrace=False,  # keep traces out of prod JSON logs
            diagnose=False,
            enqueue=True,
        )
        return

    # Human-readable format for local development.
    logger.add(
        sys.stdout,
        level=_level,
        backtrace=True,
        diagnose=False,
        enqueue=True,
        colorize=True,
        format=(
            "<green>{time:HH:mm:ss.SSS}</green> | "
            "<level>{level: <8}</level> | "
            "session={extra[session_id]} agent={extra[agent]} "
            "step={extra[step]} event={extra[event]} | "
            "<level>{message}</level>"
        ),
    )

bind_logger

bind_logger(
    *,
    session_id: str = "-",
    task_id: str = "-",
    context_id: str = "-",
    agent: str = "-",
    node: str = "-",
    step: int | str = "-",
    event: str = "-",
    **extra: Any,
)

Return a loguru logger bound with all standard correlation fields.

All fields default to "-" so the format string never raises KeyError.

Parameters:

Name Type Description Default
session_id str

Request/session identifier (primary Loki label). Defaults to "-".

'-'
task_id str

Workflow task identifier. Defaults to "-".

'-'
context_id str

Sub-task or thread context. Defaults to "-".

'-'
agent str

Agent name. Defaults to "-".

'-'
node str

Workflow node name. Defaults to "-".

'-'
step int | str

Step name (e.g. "llm", "tool"). Defaults to "-".

'-'
event str

Dot-namespaced action (e.g. "step.start", "step.error"). Defaults to "-".

'-'

Returns:

Type Description

The loguru logger instance.

Source code in src/ant_ai/core/logging.py
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
def bind_logger(
    *,
    session_id: str = "-",
    task_id: str = "-",
    context_id: str = "-",
    agent: str = "-",
    node: str = "-",
    step: int | str = "-",
    event: str = "-",
    **extra: Any,
):
    """
    Return a loguru logger bound with all standard correlation fields.

    All fields default to "-" so the format string never raises KeyError.

    Args:
        session_id: Request/session identifier (primary Loki label). Defaults to "-".
        task_id: Workflow task identifier. Defaults to "-".
        context_id: Sub-task or thread context. Defaults to "-".
        agent: Agent name. Defaults to "-".
        node: Workflow node name. Defaults to "-".
        step: Step name (e.g. "llm", "tool"). Defaults to "-".
        event: Dot-namespaced action (e.g. "step.start", "step.error"). Defaults to "-".

    Returns:
        The loguru logger instance.
    """
    return logger.bind(
        session_id=session_id,
        task_id=task_id,
        context_id=context_id,
        agent=agent,
        node=node,
        step=step,
        event=event,
        **extra,
    )