如何配置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
相关产品推荐
相关产品推荐

