VSCode/Jupyter与Python Rich日志库冲突,输出</>符号如何消除?
解决VSCode中Jupyter Notebook使用Rich日志库时左侧出现
</>符号的问题 问题描述
在VSCode的Python Jupyter Notebook环境中,使用Rich日志格式化库输出日志(如log.info("some text"))时,每条日志左侧都会出现</>符号,影响日志可读性。
已知原因:Rich默认启用类HTML标记解析(markup=True),这些标记被Jupyter的渲染引擎误解析为HTML元素,导致出现多余的</>符号。
解决方案
方法1:关闭Rich的标记解析功能
最直接的解决方式是初始化RichHandler时将markup参数设为False,这样Rich不再解析类HTML标记,Jupyter也就不会渲染出多余符号。
修改后的代码:
import logging import os import sys from rich.logging import RichHandler def set_logging(): FORMAT = "Func/Mod:%(funcName)s %(message)s" # 关闭markup功能,避免Jupyter解析HTML标记 logging.basicConfig(level=logging.INFO, format=FORMAT, datefmt="[%X]", handlers=[RichHandler(markup=False, show_path=False)]) if sys.platform.lower() == "win32": os.system('color') log = logging.getLogger(__name__) log.setLevel(logging.INFO) return log if __name__=="__main__": log=set_logging() log.info("This is a test") log.info("This is a test") log.info("This is a test")
方法2:保留标记功能同时避免Jupyter解析
如果需要保留Rich的标记功能(比如日志着色、加粗等样式),可以强制Rich以终端模式输出,绕过Jupyter的HTML渲染。通过创建Console实例并设置force_terminal=True,再传给RichHandler即可实现。
代码示例:
import logging import os import sys from rich.logging import RichHandler from rich.console import Console def set_logging(): FORMAT = "Func/Mod:%(funcName)s %(message)s" # 强制终端模式输出,保留标记功能的同时避免Jupyter解析HTML console = Console(force_terminal=True) logging.basicConfig(level=logging.INFO, format=FORMAT, datefmt="[%X]", handlers=[RichHandler(console=console, markup=True, show_path=False)]) if sys.platform.lower() == "win32": os.system('color') log = logging.getLogger(__name__) log.setLevel(logging.INFO) return log if __name__=="__main__": log=set_logging() log.info("This is a normal test") log.info("[bold red]This is a colored bold test[/bold red]") # 保留样式标记 log.info("This is another test")
内容的提问来源于stack exchange,提问作者MiniMe
相关产品推荐
相关产品推荐

