Skip to main content
 首页 » 编程设计

python之集中记录方法和记录当前行号

2025年05月04日11bluestorm

我有一个被许多其他类继承的类。相关类有一个日志记录方法,并在我希望记录的文本旁边记录一些额外的参数:

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 方法是什么?

请您参考如下方法:

您可以使用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有关堆栈中内容的详细信息。