簡體   English   中英

修改 python package 的現有記錄器配置

[英]Modifying existing logger configuration of a python package

我目前正在為我的項目使用cvxpy 當我解決優化問題時,我可以選擇使用prob.solve(solver=cvx.CVXOPT, verbose=True)打開詳細標志。 當我這樣做時,記錄器開始將 DEBUG 級別的日志消息打印到控制台。

我知道這是因為cvxpy源代碼中的以下部分。

LOGGER = logging.getLogger("__cvxpy__")
LOGGER.propagate = False
LOGGER.setLevel(logging.INFO)
_stream_handler = logging.StreamHandler(sys.stdout)
_stream_handler.setLevel(logging.INFO)
_formatter = logging.Formatter(
    fmt="(CVXPY) %(asctime)s: %(message)s", datefmt="%b %d %I:%M:%S %p"
)
_stream_handler.setFormatter(_formatter)
LOGGER.addHandler(_stream_handler)

如何在不破解原始源代碼的情況下將消息重定向到文件? 可以有setter方法嗎? TIA

cvxpy 不提供任何將日志打印到文件的直接選項,而是使用sys.stdout

但是,您可以將sys.stdout重定向到一個文件而不是控制台。 要做到這一點,請參閱: 將 stdout 重定向到 Python 中的文件? 或例如臨時重定向 stdout/stderr

您在.solve()調用之前將 output 重定向到程序中的一個文件中,它應該將日志打印到一個文件中。 最簡單的方法是使用contextlib.redirect_stdout

這樣,當您使用verbose=True調用solve時,您提到的代碼塊中提到的sys.stdout將重定向到文件而不是控制台。 如果您不熟悉 stdin、stdout 和 stderr,我建議您先快速閱讀一下它們。

暫無
暫無

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

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