【问题标题】:centralized logging method and logging current line number集中记录方法和记录当前行号
【发布时间】:2013-12-15 03:00:41
【问题描述】:

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

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

【问题讨论】:

标签: python logging


【解决方案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 了解堆栈中的详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多