test --buffer does not capture logs

Hey,

I have set up structlog in settings.py as follows:

# Do not let Django configure default logging. We don't want to deal with overriding `AdminEmailHandler`/`mail_admins` and such.
# See: https://github.com/django/django/blob/main/django/utils/log.py
LOGGING_CONFIG = None

# processors used on both `structlog` and `logging` originated events
_common_processors = [
    structlog.contextvars.merge_contextvars,
    structlog.stdlib.add_logger_name,
    structlog.stdlib.add_log_level,
    structlog.processors.StackInfoRenderer(),
    structlog.processors.UnicodeDecoder(),
    structlog.processors.CallsiteParameterAdder(
        {
            structlog.processors.CallsiteParameter.PATHNAME,
            structlog.processors.CallsiteParameter.LINENO,
        }
    ),
]

# Configure `structlog`
structlog.configure(
    processors=[
        structlog.stdlib.filter_by_level,
        *_common_processors,
        structlog.stdlib.ProcessorFormatter.wrap_for_formatter,
    ],
    logger_factory=structlog.stdlib.LoggerFactory(),
    wrapper_class=structlog.stdlib.BoundLogger,
)

# Configure `logging`
logging.config.dictConfig(
    {
        "version": 1,
        "disable_existing_loggers": False,
        "formatters": {
            "stdout": {
                "()": structlog.stdlib.ProcessorFormatter,
                "foreign_pre_chain": [
                    structlog.stdlib.ExtraAdder(),
                    *_common_processors,
                ],
                "processors": [
                    structlog.stdlib.ProcessorFormatter.remove_processors_meta,
                    structlog.dev.ConsoleRenderer(colors=True),
                ],
            },
        },
        "handlers": {
            "stdout": {
                "class": "logging.StreamHandler",
                "formatter": "stdout",
            },
            "null": {
                "class": "logging.NullHandler",
            },
        },
        "loggers": {
            "": {
                "handlers": ["stdout"],
            },
            "my_project": {
                "level": "INFO",
            },
            "django": {
                "level": "INFO",
            },
        },
    }
)

When running manage.py test --buffer ... I still see the dots interspersed with log output. Any idea why this is not being buffered?

Mystery solved:

https://stackoverflow.com/questions/7472863/pydev-unittesting-how-to-capture-text-logged-to-a-logging-logger-in-captured-o

No idea how the --buffer manages to capture logs for anyone. Django sets up logging (customized or not) and thus StreamHandler captures sys.stderr before unittest.TestResult sets it to StringIO. But maybe that’s not the promise of --buffer and I misunderstood…