You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Monaco Editor实现VS Code同款日志堆栈跟踪高亮

解决Monaco Editor日志堆栈跟踪高亮问题

Monaco默认的log语言仅支持基础日志元素(如日期、日志级别)的高亮,没有针对堆栈跟踪的匹配规则,这就是它和VS Code表现差异的核心原因。以下是具体解决方法:

1. 自定义带堆栈跟踪高亮的日志语言

基于Monaco的Monarch分词器,扩展出支持堆栈跟踪的自定义日志语言:

步骤1:注册自定义语言并添加分词规则

// 注册自定义日志语言
monaco.languages.register({ id: 'enhanced-log' });

// 设置分词规则,覆盖常见Java/Python堆栈跟踪格式
monaco.languages.setMonarchTokensProvider('enhanced-log', {
  tokenizer: {
    root: [
      // 匹配Java堆栈跟踪行:at com.example.Class.method(Class.java:123)
      [/at\s+\w+(\.\w+)*\.\w+\([^)]+\)/, 'stack-trace'],
      // 匹配Python堆栈跟踪行:File "/path/file.py", line 123, in func_name
      [/File\s+".+?",\s+line\s+\d+,\s+in\s+\w+/, 'stack-trace'],
      // 保留基础日志高亮规则
      [/\[\d{4}-\d{2}-\d{2}[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?\]/, 'date'],
      [/ERROR|WARN|INFO|DEBUG|TRACE/, 'keyword'],
      [/^\s*\[.+\]/, 'tag']
    ]
  }
});

// 创建编辑器时指定使用自定义语言
const editor = monaco.editor.create(document.getElementById('editor-container'), {
  value: '你的日志内容',
  language: 'enhanced-log'
});

步骤2:添加堆栈跟踪样式

在页面CSS中定义对应token的样式,模拟VS Code的显示效果:

.monaco-editor .token.stack-trace {
  font-style: italic;
  color: #6a9955; /* 匹配VS Code堆栈跟踪的绿色调 */
}

2. 复用VS Code内置的Log语法规则

如果需要和VS Code完全一致的高亮效果,可以提取VS Code内置的log语言规则(VS Code内置扩展包含完整的堆栈跟踪匹配逻辑),直接移植到Monaco中——两者的Monarch语法规则完全兼容,只需将对应规则复制到setMonarchTokensProvider即可。

内容的提问来源于stack exchange,提问作者Marko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:03:14