Skip to main content
 首页 » 编程设计

python之我可以在记录时设置为 gevent greenlet 显示的自定义名称吗

2025年05月04日11emanlee

当我使用标准的 logging 包从 greenlets 中打印出日志语句时,我得到的文本如下所示:

2014-02-06 22:38:43,428 [INFO] (11396-Dummy-2) event_listener: About to block 

我指的是 11396-Dummy-2 部分。例如,我希望它改为说“Main”或“Listener 1”之类的话。这可能吗?从当前的文档中,我没有看到任何 API 可以这样做。

请您参考如下方法:

我不确定您日志中的 11396-Dummy-2 部分来自哪里,但是如果您想向日志中添加上下文信息(例如 greenlet 标识符),那么是a number of documented ways这样做。这是一个使用 LoggerAdapter 的示例:

import logging 
import gevent 
 
class Adapter(logging.LoggerAdapter): 
    def process(self, msg, kwargs): 
        msg = '(%s) %s' % (gevent.getcurrent()._run.__name__, msg) 
        return msg, kwargs 
 
logger = Adapter(logging.getLogger(), {}) 
 
def foo(): 
    logger.debug('Running in foo') 
    gevent.sleep(0) 
    logger.debug('Explicit context switch to foo again') 
 
def bar(): 
    logger.debug('Explicit context to bar') 
    gevent.sleep(0) 
    logger.debug('Implicit context switch back to bar') 
 
logging.basicConfig(level=logging.DEBUG, 
                    format='%(levelname)s %(threadName)s %(message)s') 
gevent.joinall([ 
    gevent.spawn(foo), 
    gevent.spawn(bar), 
]) 

运行时,应该打印

DEBUG MainThread (foo) Running in foo 
DEBUG MainThread (bar) Explicit context to bar 
DEBUG MainThread (foo) Explicit context switch to foo again 
DEBUG MainThread (bar) Implicit context switch back to bar