Logging 避免在Ipython笔记本中记录输出时使用红色背景色

Logging 避免在Ipython笔记本中记录输出时使用红色背景色,logging,ipython,ipython-notebook,Logging,Ipython,Ipython Notebook,笔记本打印日志输出时是否可以避免红色背景色?有关示例,请参见此示例笔记本 红色背景突出显示发送到stderr的输出,而不是stdout。为了避免这种情况,您可以将日志发送到标准输出: ch = logging.StreamHandler(sys.stdout) 突出显示的答案对我不起作用。Jupyter笔记本似乎在完成任何导入之前设置了记录器。要将任何stderr重定向到stdout,我必须首先重新加载日志模块: 导入系统 导入日志记录 从导入lib导入重新加载 重新加载(日志记录) logg

笔记本打印日志输出时是否可以避免红色背景色?有关示例,请参见此示例笔记本


红色背景突出显示发送到stderr的输出,而不是stdout。为了避免这种情况,您可以将日志发送到标准输出:

ch = logging.StreamHandler(sys.stdout)

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

导入系统 导入日志记录 从导入lib导入重新加载 重新加载(日志记录) logging.basicConfig(stream=sys.stdout,格式=“”, level=logging.INFO,datefmt=None) log=logging.getLogger(_名称__) log.info(“这应该在Jupyter中作为正常输出打印,而不是在红色框中打印”)
这也可以包含在导入Jupyter笔记本的软件包中,例如使用
导入我的开发软件包
-并防止日志信息显示为红色框。要仅在Jupyter模式(而不是控制台)下为包运行此操作,请添加一个检查:
如果不是type(sys.stdout)=io.TextIOWrapper:#Jupyter模式

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

如果安装了触控笔浏览器插件,则可以更改CSS样式以使用不同的颜色

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

这有帮助吗?

要让答案生效,您必须用新的处理程序替换自动安装的log.handler。相反,执行
log.handlers[0].stream=sys.stdout
对我有效,同时保留默认streamhandler的格式如果您使用
logging.basicConfig
设置日志记录,您还可以传递
stream=sys.stdout
。如果您喜欢我,希望所有级别低于ERROR的日志消息都不具有红色背景,并且错误和关键日志消息仍应具有红色背景,那么您可能会发现这很有用:。您可能想将
Fore.Red
改为
Back.Red
和其他类似的日志颜色。或者您可以尝试创建一个记录器,将错误和关键日志定向到stderr,并将所有其他日志定向到stdout…只是想给@sandervandenhaute一个赞誉-太棒了!