CodeMirror作为一款功能强大的代码编辑器,支持通过mode配置实现语法高亮。对于日志文件的高亮处理,我们需要结合正则表达式匹配和CSS样式定义两个关键环节。
// 示例:匹配常见日志格式
CodeMirror.defineMode('loghighlight', function() {
return {
token: function(stream) {
// 匹配时间戳
if (stream.match(/^\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\]/))
return 'timestamp';
// 匹配错误级别
if (stream.match(/(ERROR|WARN|INFO|DEBUG)/))
return 'loglevel' + stream.current().toLowerCase();
// 匹配IP地址
if (stream.match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/))
return 'ip-address';
stream.next();
return null;
}
};
});
/* 基础日志样式 */
.cm-s-default .cm-timestamp { color: #6a9955; }
/* 不同日志级别颜色 */
.cm-s-default .cm-loglevelerror { color: #f44747; font-weight: bold; }
.cm-s-default .cm-loglevelwarn { color: #d7ba7d; }
.cm-s-default .cm-loglevelinfo { color: #9cdcfe; }
.cm-s-default .cm-logleveldebug { color: #b5cea8; }
/* IP地址特殊样式 */
.cm-s-default .cm-ip-address {
text-decoration: underline;
color: #569cd6;
}
Q:正则匹配失效怎么办?
A:使用regex测试工具验证表达式,确保考虑了日志的各种变体格式。
Q:高亮样式不生效?
A:检查CSS选择器是否正确,确保类名前缀与CodeMirror主题一致(如.cm-s-default)。
Q:如何处理超长日志行?
A:启用CodeMirror的lineWrapping配置,并考虑对超长内容进行特殊样式处理。