簡體   English   中英

集中記錄方法和當前行號記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM