logging.LogRecord.getMessage()
通過提供工廠簡化了日誌記錄的操作。我用我的一個模塊,在每一段代碼進口,以均質化日誌記錄:通過日誌記錄中變量的作用域是什麼?
log = mylogging.mylogging("name_of_the_project")
這工作得很好
# this is mylogging.py
import logging
import logging.handlers
def mylogging(name):
old_factory = logging.getLogRecordFactory()
def record_factory(*args, **kwargs):
record = old_factory(*args, **kwargs)
# send an SMS for critical events (level = 50)
if args[1] == 50:
pass # here is the code which sends an SMS
return record
logging.setLogRecordFactory(record_factory)
# common logging info
log = logging.getLogger(name)
log.setLevel(logging.DEBUG)
(...)
我所有的腳本引導記錄。
我現在想跟蹤發送的短信數量。爲此,我想在mylogging.py
之內設置一個計數器,這對所有import mylogging
的腳本通用。問題是這樣的變量對於每個腳本都是本地的。
在另一方面,logging
是在這個意義上,當不同的腳本調用logging.getLogger(name)
具有相同name
,處理程序被重複使用特殊的 - 這意味着有腳本之間的一些持久性(儘管他們每個人做一個獨立的import logging
)。
記住這一點,是否有一種方法可以使用一個變量,該變量對於所有日誌都是通用的,放在here is the code which sends an SMS
行之後,無論日誌請求來自哪個腳本,哪個腳本都會增加?
你使用術語 「腳本」 目前尚不清楚。你是否多次執行Python解釋器並試圖讓值在整個運行過程中保持不變?或者你在談論單個Python程序中使用的多個模塊?在單個Python解釋器運行中,無論有多少個模塊導入「mylogging」,只有一個「mylogging.counter」。 – user2357112