0

How can I add additional fields to the event_dict? The documentation mentions a pre_chain, which only seems to be available for entries which do not originate from structlog??

import logging
import structlog

class Logging:
    @staticmethod
    def my_logger(logger_name) -> logging.Logger:
        json_renderer = structlog.processors.JSONRenderer()

        pre_chain = [structlog.stdlib.ExtraAdder()]

        def render(logger, method, event_dict):
            return f"[{event_dict['level'].upper()}] - {event_dict['filename']} - {json_renderer(logger, method, event_dict)}"

        structlog.configure(
            processors=[
                structlog.processors.add_log_level,
                structlog.processors.TimeStamper(fmt="iso", key="timestamp_utc", utc=True),
                structlog.processors.CallsiteParameterAdder(
                    [structlog.processors.CallsiteParameter.FILENAME]
                ),
                render,
            ],
            wrapper_class=structlog.make_filtering_bound_logger(logging.INFO),
        )

        # Where do I use the formatter?
        formatter = structlog.stdlib.ProcessorFormatter(
            # These run ONLY on `logging` entries that do NOT originate within
            # structlog.
            foreign_pre_chain=pre_chain,
            # These run on ALL entries after the pre_chain is done.
            processors=[
                # Remove _record & _from_structlog.
                structlog.stdlib.ProcessorFormatter.remove_processors_meta,
                structlog.dev.ConsoleRenderer(),
            ],
        )

        logger = structlog.getLogger()
        return logger

Desired output:

logger.info("my logging message", extra="hello")

[INFO] - main.py - {"event": "my logging message", "level": "info", "timestamp_utc": "2023-04-06T08:01:44.110987Z", "filename": "main.py", "extra": "hello"}

Omega
  • 750
  • 1
  • 8
  • 24

0 Answers0