![](/img/trans.png)
[英]Python logger ignores FileHandler and StreamHandler levels in class
[英]Python Logger : StreamHandler not controlling my terminal stdout?
我有 - 我相信 - 一個相當標准的記錄器配置,有兩個處理程序:文件和 stream。文件處理程序工作得很好,我可以用自己的級別控制 output 文件的內容,但 stream 處理程序似乎沒有做任何事情,無論我是否添加 StreamHandler,所有根日志都會傳遞到標准輸出。 任何人都會知道我做錯了什么?
我在 Ubuntu 20.04 上運行 python3.10,這是配置:
import logging
import sys
# root logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# terminal logger
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.CRITICAL)
logger.addHandler(stream_handler)
# file logger
file_handler = logging.FileHandler(f'logs/{__name__}.txt', 'w')
file_handler.setLevel(logging.DEBUG)
logger.addHandler(file_handler)
我試圖將 sys.stdout 作為 StreamHandler() 的參數傳遞,但它並沒有改變結果。 有了上面的內容,我希望控制台只打印 CRITICAL 但它顯示了所有級別:
DEBUG:network:deserialized data: ['111', 'idle', 'normal']
INFO:network:ID:100 ['normal'] already exists, storing server_states[587]: (-13, 2890, 35, 69)
DEBUG:network:_entity.position.server_states={583: <rect(-17, 2713, 35, 69)>}
INFO:network:sending:100|idle['normal']|480;971;35;69|right|0|0|1000.0|3|None|0|0;0|0;0;0;0;0;0
INFO:network:received:107|idle['normal','collectable']12;2935;35;69|left|0|0|1000.0|3|None|45.1
我想知道它是否與記錄器名稱(來自模塊名稱的動態)有關?
您的配置應按預期工作。 這個稍微修改過的腳本:
import logging
import sys
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# terminal logger
stream_handler = logging.StreamHandler(sys.stdout)
stream_handler.setLevel(logging.CRITICAL)
logger.addHandler(stream_handler)
# file logger
file_handler = logging.FileHandler(f'logs/{__name__}.txt', 'w')
file_handler.setLevel(logging.DEBUG)
logger.addHandler(file_handler)
for level in (logging.DEBUG, logging.INFO, logging.WARNING,
logging.ERROR, logging.CRITICAL):
if level:
logger.log(level, "Event at %s", logging.getLevelName(level))
按預期工作,如下所示:
$ python3.10 test_71641676.py > tmp.txt
$ more tmp.txt
Event at CRITICAL
這表明sys.stdout
正在用於StreamHandler
。
這似乎與我有多個模塊這一事實有關——每個模塊都可以有一個記錄器來控制台,但主腳本必須保持控制並有自己的記錄器集(我沒有)。 此頁面解決了我的問題: https://docs.python.org/3/howto/logging-cookbook.html#logging-to-multiple-destinations
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.