簡體   English   中英

在共享庫中登錄Python的最佳做法

[英]Best practices for logging in Python in shared libraries

簡而言之,我編寫了ETL管道。 它們通常在高級腳本中進行描述。 在它們中,我使用不同的內部庫(我們來管理它們),這些庫提供實用程序功能,工具或內部數據結構。

在處理從不同存儲庫導入的多個軟件包時,有關日志記錄的常見最佳實踐是什么?

我的問題是:

1)我應該將日志放入庫中嗎? 還是僅在頂級腳本中?

一方面,在某些庫函數/類中顯示某些信息可能很有用。 另一方面,它強加了特定記錄器的庫客戶端用法。

我檢查了幾個開源項目,似乎根本沒有日志。

2)如果確實將日志放入所有共享庫中,那么將唯一的記錄器傳遞給所有內容的Python最佳實踐是什么?

我希望我的日志記錄格式和策略在每個庫調用中保持一致,因為一切都作為“整體”運行。 是否應該在主腳本中初始化記錄器,並在創建的每個對象中傳遞相同的記錄器? 對我來說似乎多余。 我看到了另一種模式,其中所有需要記錄的類都將從記錄類繼承。 在我看來,這可能會過大,並使整個體系結構復雜化。

我在另一個stackoverflow中讀到, 實際上每個記錄器都是父級程序包記錄器的子級 當軟件包來自不同的存儲庫時,如何應用?

謝謝

將沒有處理程序(或僅包含null處理程序 )的記錄器添加到庫中,並使用該記錄器進行所有內部記錄。 給它一個與庫相關的名稱。 當您執行此操作時,使用該庫的任何應用程序都可以獲取記錄器並根據需要添加處理程序以訪問日志。

一個示例就是請求庫,它執行與此類似的操作。

import logging
import requests
r = logging.getLogger('requests')
r.addHandler(logging.StreamHandler())
r.setLevel(logging.DEBUG)
requests.get('http://stackoverflow.com')

將打印

Starting new HTTP connection (1): stackoverflow.com
http://stackoverflow.com:80 "GET / HTTP/1.1" 301 143
Starting new HTTPS connection (1): stackoverflow.com
https://stackoverflow.com:443 "GET / HTTP/1.1" 200 23886

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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