Skip to content

CallsiteParameterAdder does not respect stacklevel #762

@fraser-langton

Description

@fraser-langton

Been playing around with a bunch of configs trying to get stacklevel to work, but CallsiteParameterAdder doesn't use it, which is a little annoying and defeats the purpose of stacklevel

import logging

import structlog

structlog.configure(
    processors=[
        structlog.stdlib.render_to_log_args_and_kwargs,
    ],
    logger_factory=structlog.stdlib.LoggerFactory(),
    wrapper_class=structlog.stdlib.BoundLogger,
    cache_logger_on_first_use=True,
)

formatter = structlog.stdlib.ProcessorFormatter(
    fmt="%(asctime)s - %(name)s - %(levelname)s - %(funcName)s - %(message)s",
    processors=[
        structlog.processors.CallsiteParameterAdder(
            {
                structlog.processors.CallsiteParameter.FUNC_NAME,
            },
        ),
        structlog.stdlib.ProcessorFormatter.remove_processors_meta,
        structlog.processors.KeyValueRenderer(),
    ],
)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logging.basicConfig(level=logging.INFO, handlers=[handler])


logger = structlog.get_logger()
stdlib_logger = logging.getLogger()


def func1():
    logger.info("structlog_message", stacklevel=2)
    stdlib_logger.info("stdlib_message", stacklevel=2)


def func2():
    func1()


func2()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions