首页 / 知识
关于c#:使用正则表达式解析日志文件
2023-04-14 01:22:00

Parsing a log file with regular expressions我目前正在为内部日志文件(由log4php,log4net和log4j生成)解析器。到目前为止,我有一个很好的正则表达式来解析日志,除了一个令人讨厌的地方:一些日志消息跨越多行,我无法正确匹配。我现在使用的正则表达式是:
日志格式(我用于测试解析器)是:
现在运行解析器时,我只会看到日志开始的那一行。如果将其更改为跨多行,则只会得到一个结果(整个日志文件)。 @samjudson: 您需要将RegexOptions.Singleline标志传递到正则表达式中,以便使用"。"。与所有字符匹配,不仅匹配除换行符(默认值)以外的所有字符。 我尝试过,但是随后它匹配了整个文件。我还尝试将消息组设置为。 ? (非贪婪),但随后它匹配一个字符(这也不是我要查找的字符)。 问题在于消息的模式在日期组上也匹配,因此当它在换行符上不中断时,它会不断出现。 我现在将此正则表达式用于消息组。除非日志消息中有与日志消息开头相同的模式,否则它会起作用。
这仅在日志消息在行首不包含日期的情况下有效,但是您可以尝试在"消息"组中为日期添加否定的前瞻性断言:
请注意,这需要使用RegexOptions.MultiLine标志。 您显然需要将"消息行"与"日志行"区分开来;如果您允许消息部分以换行后的日期/时间开头,则根本无法确定消息的一部分,什么不是。因此,除了使用点之外,还需要一个表达式,该表达式允许所有不包含换行符后跟日期和时间的内容。 但是,就我个人而言,我不会使用正则表达式来解析整个日志条目。我更喜欢使用自己的循环遍历每一行,并使用一个简单的正则表达式来确定行是否是新条目的开始。从可读性的angular来看,这也是我的偏爱。 您遇到的问题是,您需要终止RegEx模式,以便它知道一条消息何时结束然后下一条消息开始。 在默认模式下运行时,换行符用作隐式终止符。 问题是,如果进入多行模式,则没有终结符,因此模式会吞噬整个文件。非贪心匹配的字符越少越好。 现在,如果使用下一条消息的日期作为终止符,我认为您的解析器将仅获得每隔一行。 文件中是否还有其他内容可以终止模式? 您可能会发现,使用适当的解析器生成器来解析文件要容易得多-ANTLR可以在C#中生成一个...上下文自由解析器似乎很难,除非您"得到"它们-之后,它们变得更加简单且比正则表达式更友好使用... 您需要通过 |
最新内容
相关内容
linux命令日志输出?
linux命令日志输出?,系统,状态,命令,情况,对比,标准,实时,服务,下来,数据,怎么导出linux系统日志.1、首先进入系统日志,所有服务的登录的文件或linux命令查寻日志?
linux命令查寻日志?,系统,信息,对比,情况,日志,时间,第一,实时,命令,文件,linux查看日志命令1、第一种:查看实时变化的日志(比较吃内存)。最常用linux访问日志的命令?
linux访问日志的命令?,系统,信息,对比,实时,基础,日志,命令,文件,设备,管理,linux系统常用命令熟悉吗?如何在日志文件中,定位用户请求1、“chmlinux命令保存日志?
linux命令保存日志?,系统,信息,服务,数据,时间,下来,日志,文件,适当,等级,怎么导出linux系统日志.首先进入系统日志,所有服务的登录的文件或错linux访问日志命令?
linux访问日志命令?,系统,信息,对比,日志,简介,管理,情况,实时,命令,文件,查看linux系统日志的命令1、第一种:查看实时变化的日志(比较吃内存)。linux日志搜索命令?
linux日志搜索命令?,信息,系统,对比,工具,一致,日志,文件,命令,实时,网络,linux查看日志的命令是?具体怎么用第一种:查看实时变化的日志(比较吃linux远程日志的命令?
linux远程日志的命令?,系统,时间,信息,实时,服务,对比,日志,数据,报告,分析,Linux服务器日志管理详解连接时间日志--由多个程序执行,把纪录写入linux中打日志命令?
linux中打日志命令?,系统,实时,情况,服务,信息,对比,工作,日志,管理,名称,查看和打印日志的linux命令第一种:查看实时变化的日志(比较吃内存)。最linux日志查询命令行?
linux日志查询命令行?,系统,信息,对比,电脑,工具,情况,日志,实时,服务,官网,linux服务器中怎么查看日志内容第一步:点击“开始→控制面板→系统linux命令正则表达式?
linux命令正则表达式?,工作,环境,基础,网络,单位,名称,平台,信息,正规,管理,Linux正则表达式正则表达式基本上是一种表示法,只要程序支持这种表清楚日志命令linux?
清楚日志命令linux?,系统,时间,信息,情况,日志,实时,对比,文件,命令,程序,linux定时清理nohup命令下产生的日志1、nohup命令的缺点:日志文件文linux日志复制命令?
linux日志复制命令?,时间,信息,命令,日志,情况,实时,对比,报告,生产,环境,linux命令拷贝一段时间内的日志1、cat test.log | grep 2014-07-20