避免在Ipython Notebook中使用红色背景色作为日志输出的颜色

22
4个回答

18
红色背景突出了发送到stderr的输出,与stdout相对。为避免这种情况,您可以发送日志记录到stdout:
ch = logging.StreamHandler(sys.stdout)

1
为了让答案正常工作,您需要用新的处理程序替换自动安装的log.handler。相反,使用“log.handlers [0] .stream = sys.stdout”对我有用,同时保留默认StreamHandler的格式。 - eqzx
3
如果您使用logging.basicConfig设置日志记录,还可以通过stream=sys.stdout进行传递。 - Mack
2
如果你和我一样,希望所有低于ERROR级别的日志消息不要有红色背景,并且ERROR和CRITICAL日志消息仍然应该有红色背景,那么你可能会发现这个链接很有用:https://gist.github.com/joshbode/58fac7ababc700f51e2a9ecdebe563ad。你可能需要将`Fore.Red`改为`Back.Red`,并对其他日志颜色进行类似的调整。 - Sander Vanden Hautte
1
或者你可以尝试创建一个记录器,将 ERROR 和 CRITICAL 日志定向到 stderr,将所有其他日志定向到 stdout... - Sander Vanden Hautte
有没有办法只是将红色切换为另一种颜色? - Austin

7

对我来说,这个突出显示的答案不起作用。Jupyter Notebook似乎在进行任何导入之前就设置了日志记录器。要将任何stderr重定向到stdout,我必须首先重新加载日志记录模块:

import sys
import logging
from importlib import reload
reload(logging)

logging.basicConfig(stream=sys.stdout, format='',
                level=logging.INFO, datefmt=None)
log = logging.getLogger(__name__)
log.info("This should print as normal output in Jupyter, and not in a red box")

这也可以包含在导入到Jupyter Notebook的包中,例如:使用 import my_dev_package - 并且避免log.Info被显示为红色框。为了仅在Jupyter Mode(而不是控制台)中运行该程序包,请添加以下检查:if not type(sys.stdout)==io.TextIOWrapper: # Jupyter Mode


1
这个片段对我很有帮助。我不喜欢红色的背景,想要换成其他颜色。 我把背景颜色改成了绿色,但你可以根据需要设置CSS样式:
from IPython.core.display import HTML
HTML("""
<style>
div.output_stderr {
    background: #0C0;
}
</style>
""")

0

这是因为日志被记录到了stderr

如果您安装了Stylus浏览器插件,您可以更改CSS样式以使用不同的颜色。

.jp-RenderedText[data-mime-type='application/vnd.jupyter.stderr'] {
    background: var(--jp-cell-editor-background);
}

这有帮助吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接