Python - 添加动态调试记录器样式行号和时间函数

时间:2012-06-29 12:04:01

标签: python alias

以下函数报告当前发生运行时异常时我想从其他函数中调用的“当前”行号(和时间)。

可以理解,返回的行号始终与gTime()函数本身中getframeinfo的位置有关,即它是静态的。

每当我需要line.num / time数据时,我只想要gTime()功能而不直接将(long)gTime代码添加到主代码体中所需的每个位置。我想某些命令序列别名是我真正想要的替代我的gTime()函数中的代码 - 但找不到任何解决我问题的方法。

标准的“记录器”模块在我的多线程应用程序中无法可靠运行,因此我采用了手动解决方案。

from inspect import currentframe, getframeinfo
from datetime import datetime

def gTime():
    position = "%s [%s] - " % (str(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0')),getframeinfo(currentframe()).lineno)
    return position 

print gTime()

2 个答案:

答案 0 :(得分:0)

如果你不能使用logging,我建议你尽可能多地使用它的内部结构,或者至少从中学习它们;见http://hg.python.org/cpython/file/tip/Lib/logging/__init__.py

特别是,logging.currentframe可用于获取封闭框架:

from inspect import getframeinfo
from logging import currentframe
from datetime import datetime

def callingFrame():
    return getframeinfo(currentframe())

def gTime():
    position = "%s [%s] - " % (str(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0')), callingFrame().lineno)
    return position 

print gTime()

答案 1 :(得分:0)

“标准'记录器'模块在我的多线程应用程序中无法可靠运行,因此我采用手动解决方案。”

documentation disagrees

  

日志记录模块用于线程安全,没有任何特殊之处   需要由客户完成的工作。它虽然使用它实现了这一点   穿线锁;有一个锁可以序列化对模块的访问   共享数据,每个处理程序还创建一个锁以序列化访问   它的基础I / O.

为什么它不能可靠地运作?