正则表达式提取包含异常堆栈跟踪的多行

regex extract multiple lines containing exception stacktrace

从日志文件中提取带有异常 strack trace 的多行错误的正确正则表达式是什么。这是我的例子。

Verbose;MyComputer;07.02.2017 12:42:48,831;Area=;SubArea=;SessionId=;StepId;User=;Message=Repository CareProviderRepository:START GetCareProviderByZsrMethod with ZSR: H110702
Error;MyComputer;07.02.2017 12:42:51,409;Area=;SubArea=;SessionId=;StepId;User=;Message=Repository CareProviderRepository:Fail to get CareProviderMethod with Zsrnumber: H110702
Error;MyComputer;07.02.2017 12:42:51,933;Area=;SubArea=;SessionId=;StepId;User=;Message=Services:Exception: System.Data.Entity.Core.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> System.Data.SqlClient.SqlException: Invalid column name 'Name_DE'.
Invalid column name 'Name_FR'.
Invalid column name 'Name_IT'.
Invalid column name 'DefaultText'.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
Verbose;MyComputer;07.02.2017 12:42:52,361;Area=;SubArea=;SessionId=;StepId;User=;Message=Business NetworkManager:START Get: Network with Code: 95; withNetworkMembers: False
Verbose;MyComputer;07.02.2017 12:42:52,369;Area=;SubArea=;SessionId=;StepId;User=;Message=Repository NetworkRepository:START Get: 95
Error;MyComputer;07.02.2017 12:42:51,933;Area=;SubArea=;SessionId=;StepId;User=;Message=Services:Exception: System.Data.Entity.Core.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> System.Data.SqlClient.SqlException: Invalid column name 'Name_DE'.
Invalid column name 'Name_FR'.
Invalid column name 'Name_IT'.
Invalid column name 'DefaultText'.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
Verbose;MyComputer;07.02.2017 12:42:52,361;Area=;SubArea=;SessionId=;StepId;User=;Message=Business NetworkManager:START Get: Network with Code: 95; withNetworkMembers: False
Verbose;MyComputer;07.02.2017 12:42:52,369;Area=;SubArea=;SessionId=;StepId;User=;Message=Repository NetworkRepository:START Get: 95

这是我的正则表达式:(Error;(?:.*\r?\n?)\s)

这个正则表达式只 select 我一行或错误。实际上我想要一个可以 select 我 3 错误的正则表达式(第一个错误是单行错误,后来的 2 个错误是多行错误)。

我的正则表达式没有在错误行末尾转义 CRLF 或换行符。

每条记录的尾随边界是 Debug;Verbose;Info;Error;

有什么建议吗?

您可以使用以下正则表达式

/^Error;.*(?:\r?\n(?!Error;|Verbose;|Info;|Debug;).*)*/gm

请根据您使用的语言调整符号。

详情

  • ^ - start of a line (mmodifier makes the^` 匹配一行的开头而不是整个字符串)
  • Error; - 匹配文字子串 Error;
  • .* - 匹配行的其余部分
  • (?:\r?\n(?!Error;|Verbose;|Info;|Debug;).*)* - 0+ 个序列:
    • \r?\n(?!Error;|Verbose;|Info;|Debug;) - 换行符后面没有任何括号内的替代项
    • .* - 整行。