1 Star 0 Fork 79

中华田园人 / comNG

forked from xenkuo / comNG 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
comNGLang-Syntax.md 5.22 KB
一键复制 编辑 原始数据 按行查看 历史
xenkuo 提交于 2020-05-30 19:05 . add doc files

comNGLang 语法

简述

comNGLangcomNG 定义的一套简单的串口日志语法格式。如果串口输出数据符合 comNGLang 的语法格式,这些数据就会在 comNG 里自动高亮显示。传统的日志高亮需要在串口数据里添加额外的标识符,比如 ANSI escape codes。这种方式有两个问题:

  • 输出端的复杂度增大
  • 不是所有的串口助手不支持这种语法

comNGLang 不再有类似的问题。

comNG 的 editor 组件使用的是 monaco editor,vscode 同款。在 monaco editor 里自定义一套语法相对来说比较简单,于是就有了 comNGLang

语法定义

comNGLang 的定义主要是一组正则表达式,现在的实现基本可用。但是由于本人能力有限,所以这套正则定义应该还有很大的提升空间,希望大家有时间可以优化下相关实现。

现在的正则有:

        [/^\[?[f|F][a|A][t|T][a|A][l|L]\]?\s.*/, "fatal"],
        [/\s+\[?[f|F][a|A][t|T][a|A][l|L]\]?\s+/, "fatal"],
        [/^\[?F\]?\s.*/, "fatal"],
        [/\s+\[?F\]?\s+/, "fatal"],
        [/^\[?[e|E][r|R][r|R][o|O][r|R]\]?\s.*/, "error"],
        [/\s+\[?[e|E][r|R][r|R][o|O][r|R]\]?\s+/, "error"],
        [/^\[?E\]?\s.*/, "error"],
        [/\s+\[?E\]?\s+/, "error"],
        [/^\[?[w|W][a|A][r|R][n|N]\]?\s.*/, "warn"],
        [/\s+\[?[w|W][a|A][r|R][n|N]\]?\s+/, "warn"],
        [/^\[?W\]?\s.*/, "warn"],
        [/\s+\[?W\]?\s+/, "warn"],
        [/^\[?[i|I][n|N][f|F][o|O]\]?\s.*/, "info"],
        [/\s+\[?[i|I][n|N][f|F][o|O]\]?\s+/, "info"],
        [/^\[?I\]?\s.*/, "info"],
        [/\s+\[?I\]?\s+/, "info"],
        [/^\[?[t|T][r|R][a|A][c|C][e|E]\]?\s.*/, "trace"],
        [/\s+\[?[t|T][r|R][a|A][c|C][e|E]\]?\s+/, "trace"],
        [/^\[?T\]?\s.*/, "trace"],
        [/\s+\[?T\]?\s+/, "trace"],
        [/^\[?[d|D][e|E][b|B][u|U][g|G]\]?\s.*/, "debug"],
        [/\s+\[?[d|D][e|E][b|B][u|U][g|G]\]?\s+/, "debug"],
        [/^\[?D\]?\s.*/, "debug"],
        [/\s+\[?D\]?\s+/, "debug"],

        [/\[\d;\d{2}m/, "useless"],
        [/\[\dm/, "useless"],

        [/[{}()[\]]/, "bracket"],
        [/^\d{1,2}:\d{2}:\d{2}:\d{1,3}/, "timestamp"],
        [/\d{1,4}(-|\/|\.|:)\d{1,2}\1\d{1,4}/, "time"],
        [
          /(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)(-|\/|\.|:)(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\2(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\2(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)/,
          "ip",
        ],
        [
          /[0-9a-fA-F]{2}(-|\/|\.|:)[0-9a-fA-F]{2}\1[0-9a-fA-F]{2}\1[0-9a-fA-F]{2}\1[0-9a-fA-F]{2}\1[0-9a-fA-F]{2}/,
          "mac",
        ],
        [/\d*\.\d+([eE][-+]?\d+)?/, "number"],
        [/0[xX][0-9a-fA-F]+/, "number"],
        [/[0-9a-fA-F]{2,}/, "number"],
        [/\d+/, "number"],

这里定义了 6 级 日志等级,分别为:

  • fatal
  • error
  • warn
  • info
  • trace
  • debug

还定义了括号、时间戳、时间、ip、mac 地址以及数字。 串口输出的文本符合这些正则的话,在 comNG 里会按照定义的规则自动高亮。 高亮的规则如下:

      { token: "number", foreground: "2e7d32" },
      { token: "bracket", foreground: "ff9800" },
      { token: "timestamp", foreground: "009688" },
      { token: "time", foreground: "2196f3" },
      { token: "ip", foreground: "03a9f4" },
      { token: "mac", foreground: "00bcd4" }
      { token: "fatal", foreground: "e91e63" },
      { token: "error", foreground: "f44336" },
      { token: "warn", foreground: "ff9800" },
      { token: "info", foreground: "9e9e9e" },
      { token: "trace", foreground: "9e9d24" },
      { token: "debug", foreground: "2e7d32" },
      { token: "useless", foreground: "cecece" },

示例

备注

  • 下文的空格包含: space, tab

日志等级

几个日志等级的语法是类似的,只是关键字不一样,这里以 fatal 为例。

        [/^\[?[f|F][a|A][t|T][a|A][l|L]\]?\s.*/, "fatal"],
        [/\s+\[?[f|F][a|A][t|T][a|A][l|L]\]?\s+/, "fatal"],
        [/^\[?F\]?\s.*/, "fatal"],
        [/\s+\[?F\]?\s+/, "fatal"],
  • [fatal] + 空格 开始 的行,整行被识别为 fatal 标签行,行内所有文本会设置为 fatal 标签的颜色。
    • 行内其他标签会被 fatal 标签覆盖
    • fatal 不区分大小写,比如: FATAL, fatal, Fatal, fAtal 都可以
    • [ 和 ] 为可选
  • 匹配 空格 + [fatal] + 空格 的 fatal 单词被识别为 fatal 标签单词,该单词会被设置为 fatal 标签的颜色。
    • 前后必须有空格
    • fatal 不区分大小写,比如: FATAL, fatal, Fatal, fAtal 都可以。
    • [ 和 ] 为可选
  • [F] + 空格 开始 的行,整行被识别为 fatal 标签行,行内所有文本会设置为 fatal 标签的颜色。
    • 行内其他标签会被 fatal 标签覆盖
    • F 区分大小写
    • [ 和 ] 为可选
  • 匹配 空格 + [F] + 空格 的 F 单词被识别为 fatal 标签单词,该单词会被设置为 fatal 标签的颜色。
    • 前后必须有空格
    • F 区分大小写
    • [ 和 ] 为可选

其他标签

其他的标签比较简单,这里也是尽量包含常用格式,大家试试应该就明白了。

JavaScript
1
https://gitee.com/Chinese_pastoral_person/comNG.git
git@gitee.com:Chinese_pastoral_person/comNG.git
Chinese_pastoral_person
comNG
comNG
master

搜索帮助