use*_*873 6 python ironpython wxpython python-2.7 python-3.x
我正在开发自定义记录器程序,根据我需要获取进程,线程和对象名称的要求在被调用函数内部(在下面的示例中,它的obj需要在get_configured_logger函数内部获取)和obj所属的类名.如下面代码中的注释所示,请提供一些实现此目的的想法.
import logging, logging.handlers
from logging import StreamHandler, Formatter
class A:
def get_configured_logger(self,name):
logger = logging.getLogger(name)
if (len(logger.handlers) == 0):
FORMAT = "%(process)s %(thread)s:-(asctime)s - %(name)s - %(levelname)s - %(message)-%(module)"
#print 'process:',process
#print 'thread:',thread
#print 'levelname:',levelname
#print 'Module:',(name portion of filename).
#print 'obj:,'name of the object(Eg:obj),current function( Eg: get_configured_logger) called by'
#print 'class name:(obj is instance of class)'
formatter = logging.Formatter(fmt=FORMAT)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
return logger
if __name__=="__main__":
obj=A()
logger = obj.get_configured_logger("DEMO")
logger.debug("TEST")
Run Code Online (Sandbox Code Playgroud)
谢谢
HEMA
jfs*_*jfs 24
要将当前进程/线程名称添加到日志消息中,您可以在格式字符串中指定:
%(processName)s %(threadName)s
Run Code Online (Sandbox Code Playgroud)
要将它们作为字符串:
process_name = multiprocessing.current_process().name
thread_name = threading.current_thread().name
Run Code Online (Sandbox Code Playgroud)
该文档描述了一个访问 current 的简单接口Thread
,然后您可以使用其name
属性来获得 Thread 名称。
然后您可以使用:
import threading
threading.current_thread().name
Run Code Online (Sandbox Code Playgroud)
请注意,它不是唯一的。
获取进程名称没有简单的方法,因为这取决于您使用的操作系统。但是,您可以通过以下方式获取进程 ID ( pid
):
import os
os.getpid()
Run Code Online (Sandbox Code Playgroud)
除非您使用multiprocessing
模块并启动子进程,在这种情况下,您可以使用提供与multiprocessing
模块非常相似的界面的Threading
模块。
归档时间: |
|
查看次数: |
15852 次 |
最近记录: |