簡體   English   中英

Python - 如何將記錄記錄到控制台和標准輸出

[英]Python - How to log records to both console and stdout

我正在嘗試用 Python logging替換舊測試框架中的所有打印語句。 我需要使用簡單的logging.debug('something')方式將記錄寫入控制台和測試報告。 我為每個測試模塊使用自定義記錄器,如下所示:

記錄器.py

import logging
from sys import stdout


def setup_logger(filename):
    logger = logging.getLogger(filename)
    logger.setLevel(logging.DEBUG)
    stdout_handler = logging.StreamHandler(stdout)
    logger.addHandler(stdout_handler)
    
    return logger

測試文件.py

from logger import setup_logger
logger = setup_logger(__name__)    
logger.debug('something')

目前我可以寫入控制台,但在生成測試報告時在 sys.stdout 中看不到這些記錄。 我正在使用HtmlTestRunner生成測試報告,看起來它沒有從這里的測試中接收標准輸出記錄:

self._stdout_data = sys.stdout.getvalue()

https://github.com/oldani/HtmlTestRunner/blob/master/HtmlTestRunner/result.py#L181

我對日志記錄不是很熟悉,也不明白這里可能存在什么問題。

sys.stdout與我的自定義記錄器寫入消息的標准輸出完全不同嗎? 有沒有簡單的方法來解決這個問題?

我閱讀了其他類似的問題(所以我的自定義記錄器是在閱讀這些問題后編寫的)但我的問題有點不同,因為我使用的是解析 sys.stdout 的報告生成器。

UPD:或者也許我已經做對了,但是在生成測試報告時我需要閱讀的不是 sys.stdout 而是其他東西來查找我的記錄?

UPD2:發現了一個從未回答過的類似老問題)也許沒有快速的解決方案( 查看通過的測試用例並在使用 python html-testrunner 時在 html 報告中顯示日志消息?

看起來解決此類問題的唯一好方法是編寫 function 做兩件事:將日志添加到控制台(我最終只使用 loguru - 簡單明了)並打印相同的消息(唯一的目的是支持舊的測試報告)。 當然,有人在成功報告中也需要 output 數據可能看起來很奇怪,但這不是我個人的選擇)

暫無
暫無

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

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