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