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



我目前使用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

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

但是,您可以将sys.stdout重定向到一个文件而不是控制台。要做到这一点,请参阅:在Python中将stdout重定向到文件?或临时重定向stdout/stderr,例如。

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

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

最新更新