将日志字符串与正则表达式匹配



希望我能在这里找到帮助,因为我真的对正则表达式一无所知。我正在尝试使用从此示例开始的摩纳哥编辑器创建日志文件查看器,但我的日志字符串可以是多行的,我想使用不同的日期格式。所以假设我有一个这样的日志字符串:

[2017-02-03 22:07:56] [info] [Memory] After GC, total memory:737mb, used: 268mb, reclaimed: 293
[2017-02-03 22:10:15] [info] [Memory] After GC, total memory:705mb, used: 247mb, reclaimed: 141
[2017-02-03 22:10:25] [info] [Memory] After GC, total memory:705mb, used: 258mb, reclaimed: 21
[2017-02-03 22:14:34] [warn] [Evaluator] org.mozilla.javascript.EcmaError: Cannot convert null to an object.
   Caused by error in Business Rule: 'GlobalHideGlobalUsersFromNonAdmins' at line 5
      2: 
      3:    var encodedQueryString = 'sys_domain!=global';
      4:    
==>   5:    var imp = gs.getImpersonatingUserName().toString();
      6:    if(imp.length > 0) {
      7:        encodedQueryString = encodedQueryString + '^ORuser_name=' + imp;
      8:    }
[2017-02-03 22:14:34] [warn] [Evaluator] org.mozilla.javascript.EcmaError: Cannot convert null to an object.
   Caused by error in Business Rule: 'GlobalHideGlobalUsersFromNonAdmins' at line 1
==>   1: (function executeRule(current, previous /*null when async*/) {
      2: 
      3:    var encodedQueryString = 'sys_domain!=global';
      4:    

这目前与我的日期格式不匹配,并且如果回车与下一条日志消息不匹配,则它只会匹配日志消息的第一行。这里有任何可以帮助我的正则表达式大师吗?:)

monaco.languages.setMonarchTokensProvider('log', {
  tokenizer: {
    root: [
      [/[error.*/, "custom-error"],
      [/[warn.*/, "custom-warn"],
      [/[info.*/, "custom-info"],
      [/[debug.*/, "custom-debug"],
      [/[[a-zA-Z 0-9:]+]/, "custom-date"],
    ]
  }
});

更新:所以这是我想出的解决方案。显然,我仍然无法将多行与 [DATE] 字符串匹配。所以现在我只匹配例如 [错误] 作为解决方法。也许有人能把我推向正确的方向......

monaco.languages.setMonarchTokensProvider('log', {
  tokenizer: {
    root: [
      [/[error]/, "custom-error"],
      [/[warn]/, "custom-warn"],
      [/[info]/, "custom-info"],
      [/[debug]/, "custom-debug"],
      [/^[d{4}[./-]d{2}[./-]d{2} d{2}[./:]d{2}[./:]d{2}]/, "custom-date"],
    ]
  }
});

我认为您可能在更新中的模式末尾缺少转义 - 右括号应该是"]"。

这是一个更紧密的模式,提取数字的子组共享的内容:

[(d{2,4}[:-s]])+

您能否举例说明在"两个 [DATE] 字符串之间的多行"的情况下要捕获的内容?

希望这有帮助!

最新更新