Skip to content

LogRecord.args not accessible #771

@fraser-langton

Description

@fraser-langton

If you inspect the stack the args are present in logging.Handler.format but not structlog.stdlib.ProcessorFormatter.format

processor, temp.py:15     <-- record.args = ()
format, stdlib.py:116     <-- record.args = ()
format, __init__.py:999   <-- record.args = ('a', 'b')
emit, __init__.py:1160
handle, __init__.py:1028
callHandlers, __init__.py:1762
handle, __init__.py:1700
_log, __init__.py:1684
info, __init__.py:1539
<module>, temp.py:26
import logging
import sys

import structlog
from structlog.types import EventDict
from structlog.typing import WrappedLogger

structlog.configure(processors=[structlog.stdlib.render_to_log_args_and_kwargs])  # processor shouldn't really matter here


def processor(logger: WrappedLogger, method_name: str, event_dict: EventDict) -> EventDict:
    log_record: logging.LogRecord | None = event_dict.get("_record")
    if log_record:
        print(f"{log_record.args=}")
    return event_dict["event"]


formatter = structlog.stdlib.ProcessorFormatter(fmt="%(message)s", processors=[processor])
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(formatter)
logging.basicConfig(level=logging.INFO, handlers=[handler])


logger = logging.getLogger()

logger.info("test a=%s b=%s", "a", "b")

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions