Skip to content

LogRecord.args not accessible #771

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")

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions