首頁 > 後端開發 > Python教學 > 使用單一檔案的 Python 日誌記錄(函數名稱、檔案名稱、行號)

使用單一檔案的 Python 日誌記錄(函數名稱、檔案名稱、行號)

PHPz
發布: 2024-02-08 22:00:21
轉載
1190 人瀏覽過

使用单个文件的 Python 日志记录(函数名、文件名、行号)

問題內容

我正在嘗試了解應用程式的工作原理。為此,我將偵錯命令插入作為每個函數主體的第一行,目的是記錄函數的名稱以及向日誌輸出發送訊息的行號(程式碼內)。最後,由於這個應用程式由許多文件組成,我想建立一個日誌文件,以便我可以更好地理解應用程式的控制流。

這是我所知道的:

  1. 為了取得函數名稱,我可以使用function_name.__name__ 但我不想使用function_name (這樣我就可以快速複製並貼上通用的Log.info("Message") 到正文中所有功能)。我知道這可以使用 __func__ 巨集在 C 中完成,但我不確定 python。

  2. 為了獲取檔案名稱和行號,我已經看到(並且我相信)我的應用程式正在使用Python locals() 函數,但使用的語法我並不完全了解,例如: options = " LOG.debug('%(flag)s : %(flag_get)s' % locals()) 我嘗試使用LOG.info("My message %s" % locals()) 來產生類似 的內容{'self': <__main__.Class_name 物件位於0x22f8cd0>}。對此有任何輸入嗎?

  3. 我知道如何使用日誌記錄並向其添加處理程序以記錄到文件,但我不確定是否可以使用單個文件以項目中函數調用的正確順序記錄所有日誌訊息。


正確答案


您在這裡有一些無關緊要的問題。

我將從最簡單的開始:(3)。使用 logging 您可以將所有呼叫聚合到單一日誌檔案或其他輸出目標:它們將按照進程中發生的順序排列。

下一步:(2)。 locals() 提供目前範圍的字典。因此,在沒有其他參數的方法中,作用域中有 self,其中包含對目前實例的參考。所使用的讓您感到困惑的技巧是使用字典作為 % 運算子的 rhs 的字串格式。 "%(foo)s" % bar 將會被替換為 bar["foo"] 的值。

最後,您可以使用一些自省技巧,類似於 pdb 使用的那些可以記錄更多資訊的技巧:

def autolog(message):
    "Automatically log the current function details."
    import inspect, logging
    # Get the previous frame in the stack, otherwise it would
    # be this function!!!
    func = inspect.currentframe().f_back.f_code
    # Dump the message + the name of this function to the log.
    logging.debug("%s: %s in %s:%i" % (
        message, 
        func.co_name, 
        func.co_filename, 
        func.co_firstlineno
    ))
登入後複製

這將記錄傳入的訊息,加上(原始)函數名稱、定義所在的檔案名稱以及該檔案中的行。有關更多詳細信息,請參閱inspect - 檢查活動物件

正如我之前在評論中提到的,您也可以隨時插入 import pdb; 行,進入 <code>pdb 互動式偵錯提示符。 pdb.set_trace() 中,並重新執行您的程式。這使您能夠逐步執行程式碼,根據您的選擇檢查資料。

以上是使用單一檔案的 Python 日誌記錄(函數名稱、檔案名稱、行號)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
配置作用域
來自於 1970-01-01 08:00:00
0
0
0
privider 作用域是全域的嗎
來自於 1970-01-01 08:00:00
0
0
0
作用域的作用不起作用了?
來自於 1970-01-01 08:00:00
0
0
0
作用域問題
來自於 1970-01-01 08:00:00
0
0
0
php laravel框架模型作用域
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板