Skip to content

AttributeError: 'BytesLogger' object has no attribute 'name' #734

@kxepal

Description

@kxepal

There is an example at https://www.structlog.org/en/25.4.0/performance.html about how to use structlog with orjson:

import logging
import orjson
import structlog

structlog.configure(
    cache_logger_on_first_use=True,
    wrapper_class=structlog.make_filtering_bound_logger(logging.INFO),
    processors=[
        structlog.contextvars.merge_contextvars,
        structlog.processors.add_log_level,
        structlog.processors.format_exc_info,
        structlog.processors.TimeStamper(fmt="iso", utc=True),
        structlog.processors.JSONRenderer(serializer=orjson.dumps),
    ],
    logger_factory=structlog.BytesLoggerFactory(),
)

And it works perfectly:

log = structlog.get_logger('my_logger')
log.info('test')  # prints {"event":"test","level":"info","timestamp":"2025-07-18T07:58:55.479135Z"}

However, if I add processor structlog.stdlib.add_logger_name to include logger name it stops working:

Traceback (most recent call last):
  File "/home/kxepal/projects/example.py", line 20, in <module>
    log.info('test')
  File "/home/kxepal/projects/venv/lib/python3.12/site-packages/structlog/_native.py", line 144, in meth
    return self._proxy_to_logger(name, event, **kw)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/kxepal/projects/venv/lib/python3.12/site-packages/structlog/_base.py", line 222, in _proxy_to_logger
    args, kw = self._process_event(method_name, event, event_kw)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/kxepal/projects/venv/lib/python3.12/site-packages/structlog/_base.py", line 173, in _process_event
    event_dict = proc(self._logger, method_name, event_dict)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/kxepal/projects/venv/lib/python3.12/site-packages/structlog/stdlib.py", line 832, in add_logger_name
    event_dict["logger"] = logger.name
                           ^^^^^^^^^^^
AttributeError: 'BytesLogger' object has no attribute 'name'

Full example to reproduce an issue:

import logging
import orjson
import structlog

structlog.configure(
    cache_logger_on_first_use=True,
    wrapper_class=structlog.make_filtering_bound_logger(logging.INFO),
    processors=[
        structlog.stdlib.add_logger_name,
        structlog.contextvars.merge_contextvars,
        structlog.processors.add_log_level,
        structlog.processors.format_exc_info,
        structlog.processors.TimeStamper(fmt="iso", utc=True),
        structlog.processors.JSONRenderer(serializer=orjson.dumps),
    ],
    logger_factory=structlog.BytesLoggerFactory(),
)

log = structlog.get_logger('my_logger')
log.info('test')

How would I get logger name into records using BytesLoggerFactory?

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions