簡體   English   中英

Python 記錄器:StreamHandler 不控制我的終端標准輸出?

[英]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.

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