我有一个由许多其他类继承的类。相关类有一个日志记录方法,并在我要记录的文本旁边记录一些额外的参数:
import logging
# some lines to set logger
log = logging.getLogger('some_loger')
class SomeClass:
def log_it(self, log_text):
log.info(self.some_param + self.some_other_param + log_text + self.some_another_param)
在任何继承SomeClass
的文件中:
class MyOtherClass(SomeClass):
def some_method(self):
...
...
self.log_it('let me log this text')
我还希望记录当前行号(调用self.log_it
的行),这样我就可以轻松找到相关文件中的当前日志行。
最好的pythonic方式是什么?
答案 0 :(得分:1)
您可以使用inspect
包来查找调用代码行。
我使用此方法将函数标记为已弃用,然后跟踪调用者(当然在单元测试中)。您可以根据日志记录需求进行调整。
在将记录的文件中(a.py):
import logging # of course you have this
import inspect
# some lines to set logger
log = logging.getLogger('some_loger')
log.addHandler(logging.StreamHandler())
class SomeClass:
def log_it(self, log_text):
log.warn("DEPRECATION WARNING: {0[3]} was called from {1[3]} at line {1[2]} in {1[1]}".format(*inspect.stack()[:2]))
在“子”文件(b.py)中:
from a import SomeClass
class MyOtherClass(SomeClass):
def some_method(self):
self.log_it('let me log this text')~
b = MyOtherClass()
b.some_method()
运行b.py:
> python b.py
DEPRECATION WARNING: log_it was called from some_method at line 5 in b.py
查看inspect,了解有关堆栈内容的详细信息。