loguru icon indicating copy to clipboard operation
loguru copied to clipboard

`logger.contextualize` and threading

Open zmeir opened this issue 8 months ago • 3 comments
trafficstars

Hi,

First just wanted to say I'm really enjoying this package. It made logging fun and simple for me.

I have a question/issue when trying to log from a thread inside a logger.contextualize scope.

Here's my example:

import sys
import asyncio
import threading
from loguru import logger, _defaults

logger.remove(None)
logger.add(sys.stderr, format=_defaults.LOGURU_FORMAT + " | {extra}")

def thread_func():
    logger.info("hello thread")

async def async_func():
    logger.info("hello async")

async def main():
    with logger.contextualize(a=1):
        await async_func()
        threading.Thread(target=thread_func, daemon=True).start()

asyncio.run(main())

And here's my output:

2025-03-06 09:36:54.691 | INFO     | __main__:async_func:13 - hello async | {'a': 1}
2025-03-06 09:36:54.691 | INFO     | __main__:thread_func:10 - hello thread | {}

As you can see, the context isn't passed to the thread function, only to the async one.

Is there something I'm missing to make the context pass to the thread? Or is this capability not supported?

Version info:

  • OS: macOS 14.7.2 (23H311)
  • Python: 3.12.8
  • Loguru: 0.7.3

zmeir avatar Mar 06 '25 07:03 zmeir