[英]centralized logging method and logging current line number
我有一個由許多其他類繼承的類。 相關類具有日志記錄方法,並在我要記錄的文本旁邊記錄一些額外的參數:
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
簽出檢查堆棧中的詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.