首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修改python包的现有记录器配置

修改python包的现有记录器配置
EN

Stack Overflow用户
提问于 2021-08-20 13:57:13
回答 1查看 49关注 0票数 1

我目前正在为我的项目使用cvxpy。当我解决一个优化问题时,我可以选择使用prob.solve(solver=cvx.CVXOPT, verbose=True)打开详细标志。当我这样做时,日志记录器开始将调试级别的日志消息打印到控制台。

我理解这是因为cvxpy source code中的以下部分。

代码语言:javascript
运行
复制
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方法吗?提亚

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-20 15:29:47

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

但是,您可以将sys.stdout重定向到文件中,而不是控制台中。要做到这一点,请参见:例如Redirect stdout to a file in Python?Temporarily Redirect stdout/stderr

就在.solve()调用之前,您将输出重定向到程序中的一个文件中,它应该将日志打印到一个文件中。最简单的方法是使用contextlib.redirect_stdout

这样,当您使用verbose=True调用solve时,您提到的代码块中提到的sys.stdout将重定向到文件,而不是控制台。如果你不熟悉stdin、stdout和stderr,我建议你先快速阅读一下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68863458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档