簡體   English   中英

無法使用python3.6中的日志記錄模塊在流處理程序上打印自定義日志級別

[英]Not able to print custom log level on stream handlers using logging module in python3.6

以下是__init__.py文件中的函數,這意味着這部分代碼始終在執行代碼時運行

import logging
def log_setup():

    logging.TRACE = 5
    logging.addLevelName(5, 'TRACE')
    def trace(obj, message, *args, **kws):
        obj.log(logging.TRACE, message, *args, **kws)
    logging.Logger.trace = trace
    logging.trace = trace
    root = logging.getLogger("TEST")
    root.setLevel(5)
    ch = logging.StreamHandler()
    ch.setFormatter(f)
    ch.setLevel(5)
    root.handlers = []
    root.addHandler(ch)

我在其中一個庫說xyz.py中有以下代碼

import logging
log = logging.getLogger("TEST."+__name__)
if log.trace:
    print("***ELLO***", log.getEffectiveLevel())
    print("***ELLO***", log.isEnabledFor(logging.DEBUG))
    print("***ELLO***", log.isEnabledFor(logging.TRACE))
    log.trace("Hey Statement printed")

通過腳本調用時,無法打印log.trace。 有趣的是,對於log.isEnabledFor(logging.TRACE)始終返回False。

不知道我在這里想念的是什么

下面是輸出

***ELLO*** 10
***ELLO*** True
***ELLO*** False

除非您自己創建了自定義處理程序,否則python中沒有TRACE日志級別

以下是日志級別列表

在此處輸入圖片說明

請在那里參考https://docs.python.org/2/library/logging.html#levels

您的代碼無法運行:例如,將其粘貼到源文件中,由於f未定義,因此代碼將失敗。 注釋掉那條線,我可以毫無問題地運行它。 確定xyz的代碼之前調用了log_setup()嗎? 我的猜測是不是。 另外,線

root.handlers = []

不應該在那里-您不應該這樣做,因為handlers是一個內部屬性,並不意味着您可以直接進行更改。

logging.trace = trace

日志模塊級別的便利函數不帶初始對象參數,並且具有諸如debug(msg, *args, **kwargs)類的簽名,因此它也看起來是錯誤的。 大概您希望模塊級trace功能具有類似的簽名。

暫無
暫無

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

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