Formatting and filtering

Updated Nov 11, 2025
  • Logger-level formatting is fixed ("{logger} [LEVEL] message"). To customize output wrap handlers with formatter callables using the builder API:
def json_formatter(record: dict[str, object]) -> str:
    import json
    return json.dumps(
        {
            "logger": record["logger"],
            "level": record["level"],
            "message": record["message"],
        },
        separators=(",", ":"),
    )

stream = StreamHandlerBuilder.stdout().with_formatter(json_formatter).build()
  • Formatter identifiers are limited to "default" for now. Future releases will connect FormatterBuilder and handler formatter IDs, but this is not yet implemented.
  • Filters are only available through ConfigBuilder. dictConfig and fileConfig deliberately reject filter declarations so the limited, guaranteed-safe subset remains obvious.