正则表达式提取包含异常堆栈跟踪的多行
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;)
- 换行符后面没有任何括号内的替代项
.*
- 整行。
从日志文件中提取带有异常 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;)
- 换行符后面没有任何括号内的替代项.*
- 整行。