在 python 日志记录中显示线程 native_id

Cha*_*lie 4 python logging multithreading

有没有办法显示线程native_id:

本地ID

该线程的本机完整线程 ID。这是一个非负整数,如果线程尚未启动,则为 None。请参阅 get_native_id() 函数。这表示操作系统(内核)分配给线程的线程 ID (TID)。它的值可用于在系统范围内唯一标识该特定线程(直到线程终止,之后该值可由操作系统回收)。

在 python 日志中使用日志记录LogRecord 属性

%(threadName)s 和%(thread)s 不显示native_id。

我使用的是 Linux Ubuntu 和 RHEL。

谢谢

Ron*_*uya 6

您可以添加一个过滤器函数来拦截日志消息并将线程ID添加到其中

In [1]: import threading

In [2]: def thread_id_filter(record):
   ...:     """Inject thread_id to log records"""
   ...:     record.thread_id = threading.get_native_id()
   ...:     return record
   ...:

In [3]: import logging

In [4]: my_logger = logging.getLogger()

In [5]: handler = logging.StreamHandler()
# changed formatting character from `s` to `d` for thread_id
In [6]: handler.setFormatter(logging.Formatter('%(asctime)s | %(levelname)s | %(thread_id)d | %(message)s'))

In [7]: handler.addFilter(thread_id_filter)

In [8]: my_logger.addHandler(handler)

In [9]: my_logger.setLevel('INFO')

In [10]: my_logger.info('test123')
2021-06-15 18:33:20,400 | INFO | 6795172 | test123
Run Code Online (Sandbox Code Playgroud)