Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:使用正则表达式进行日志解析,还想从日志文件中提取一些其他值吗_C#_Regex_Parsing - Fatal编程技术网

C#:使用正则表达式进行日志解析,还想从日志文件中提取一些其他值吗

C#:使用正则表达式进行日志解析,还想从日志文件中提取一些其他值吗,c#,regex,parsing,C#,Regex,Parsing,我是C#的新手,我已经向stackoverflow提交了一个问题,但我解决了() 现在,日志输出是这样的: <FLTR> <TID: 0000000461> <RPC ID: 0072606623> <Queue: Fast > <Client-RPC: 390620 > <USER: lkoporec > <Overlay-Grou

我是C#的新手,我已经向stackoverflow提交了一个问题,但我解决了()

现在,日志输出是这样的:

<FLTR> <TID: 0000000461> <RPC ID: 0072606623> <Queue: Fast      > <Client-RPC: 390620   > <USER: lkoporec                                     > <Overlay-Group: 1         > /* Mon Feb 26 2018 13:53:04.4230 */ <Filter Level:0 Number Of Filters:10> Checking "SHR:LHP:InitSvc_GetServiceContextFlag" (0)
<API > <TID: 0000000373> <RPC ID: 0072606628> <Queue: List      > <Client-RPC: 390620   > <USER: Remedy Application Service                   > <Overlay-Group: 1         > /* Mon Feb 26 2018 13:53:06.1140 */ +BE      ARBulkEntry -- user Remedy Application Service from Normalization Engine (protocol 24) at IP address 10.122.26.197 using RPC // :q:0.1s 

<FLTR> <TID: 0000000445> <RPC ID: 0072611490> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:53:43.3600 */ <Filter Level:0 Number Of Filters:3> Checking "FB:SetGroupForSmartReportingKPIs_3" (530)
<API > <TID: 0000000382> <RPC ID: 0072611493> <Queue: List      > <Client-RPC: 390620   > <USER: darzupan                                     > <Overlay-Group: 1         > /* Mon Feb 26 2018 13:53:46.5240 */ +EXPQRY  ARExpandQueryMenu --  from Mid-tier (protocol 23) at IP address 10.122.0.61 using RPC // :q:0.0s 

<FLTR> <TID: 0000000457> <RPC ID: 0072646830> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:58:19.5660 */ <Filter Level:0 Number Of Filters:1> Checking "FB:SetGroupForSmartReportingKPIs_GetLabel" (502)
<FLTR> <TID: 0000000345> <RPC ID: 0072647870> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:58:30.4330 */ <Filter Level:0 Number Of Filters:3> Checking "FB:SetGroupForSmartReportingKPIs_3" (530)

<FLTR> <TID: 0000000441> <RPC ID: 0072647871> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:58:30.4480 */ --> Disabled -- filter is ignored
<FLTR> <TID: 0000000460> <RPC ID: 0072648393> <Queue: Fast      > <Client-RPC: 390620   > <USER: esribar                                      > <Overlay-Group: 1         > /* Mon Feb 26 2018 13:58:35.3710 */ <Filter Level:0 Number Of Filters:123> Checking "INT:SRMHPD:INC:UpdateRequest_99_SetSRAppRegistryGUID" (99)

<FLTR> <TID: 0000000460> <RPC ID: 0072648393> <Queue: Fast      > <Client-RPC: 390620   > <USER: esribar                                      > <Overlay-Group: 1         > /* Mon Feb 26 2018 13:58:35.4250 */ Application-Copy-Field-Value 600000001 1000003890
<SQL > <TID: 0000000457> <RPC ID: 0000000000> <Queue: Admin     > <Client-RPC: 390600   > <USER:                                              > <Overlay-Group: 0         > /* Mon Feb 26 2018 13:58:41.8550 */ Generating prepared statement

<FLTR> <TID: 0000000447> <RPC ID: 0072648992> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:58:41.9020 */ --> Disabled -- filter is ignored
<SQL > <TID: 0000000346> <RPC ID: 0072649991> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:58:51.9350 */ COMMIT TRANSACTION

<API > <TID: 0000000439> <RPC ID: 0072650203> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:58:53.7280 */ +CE      ARCreateEntry -- schema FB:History from Flashboards (protocol 22) at IP address 10.122.26.197 using RPC // :q:0.0s 
<SQL > <TID: 0007483686> <RPC ID: 0000000000> <Queue: Escalation> <Client-RPC: 0        > <USER:                                              > <Overlay-Group: 0         > /* Mon Feb 26 2018 14:06:48.7630 */ Generating prepared statement

<SQL > <TID: 0000000447> <RPC ID: 0000000000> <Queue: Admin     > <Client-RPC: 390600   > <USER:                                              > <Overlay-Group: 0         > /* Mon Feb 26 2018 14:06:52.1940 */ OK
<SQL > <TID: 0000000457> <RPC ID: 0072764627> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 14:18:10.5700 */ OK
/*2018年2月26日星期一13:53:04.4230*/检查“SHR:LHP:InitSvc_GetServiceContextFlag”(0)
/*2018年2月26日星期一13:53:06.1140*/+BE ARBulkEntry——来自IP地址为10.122.26.197的规范化引擎(协议24)的用户补救应用程序服务,使用RPC/:q:0.1s
/*2018年2月26日星期一13:53:43.3600*/检查“FB:SetGroupForSmartReportingKPI_3”(530)
/*2018年2月26日星期一13:53:46.5240*/+EXPQRY是xpandquerymenu——来自IP地址为10.122.0.61的中间层(协议23),使用RPC/:q:0.0s
/*2018年2月26日星期一13:58:19.5660*/检查“FB:SetGroupForSmartReportingKPI_GetLabel”(502)
/*2018年2月26日星期一13:58:30.4330*/检查“FB:SetGroupforSmartReportingKPI_3”(530)
/*2018年2月26日星期一13:58:30.4480*/-->已禁用--忽略筛选器
/*2018年2月26日星期一13:58:35.3710*/检查“INT:SRMHPD:INC:UpdateRequest_99_setrappregistryGUID”(99)
/*2018年2月26日星期一13:58:35.4250*/应用程序副本字段值600000001 100003890
/*2018年2月26日星期一13:58:41.8550*/生成准备好的报表
/*2018年2月26日星期一13:58:41.9020*/-->已禁用--忽略筛选器
/*2018年2月26日星期一13:58:51.9350*/提交事务
/*2018年2月26日星期一13:58:53.7280*/+CE ARCreateEntry——模式FB:IP地址为10.122.26.197的闪板(协议22)的历史记录,使用RPC/:q:0.0s
/*2018年2月26日星期一14:06:48.7630*/生成准备好的报表
/*2018年2月26日星期一14:06:52.1940*/OK
/*2018年2月26日星期一14:18:10.5700*/OK
看到那些TID了吗?发生的每个元素都有自己的线程ID,因此一个元素可以在一个.log文件中分散100个TID

当超时发生时(前一行),如何捕获TID,在原始.log文件中搜索该TID,并将引用该TID的每一行导出到新文件中(当然,对于每一个超时都要这样做)

使用新的regex/DateTime函数?是否可以只获取TID(因为元素的TID总是相同的,RPC ID和其他ID不是相同的-一个TID在这个输出“TID:0000000 447”中发生两次,但彼此不同)

到目前为止,我的代码是这样的:

using System;
using System.Globalization;
using System.IO;
using System.Text.RegularExpressions;

namespace LogParser
{
class Program
{
    static void Main(string[] args)
    {
        Console.OutputEncoding = System.Text.Encoding.UTF8;
        var counterLine = 0;
        var counterTimeout = 0;
        var line = string.Empty;
        var previousLine = string.Empty;
        var previousDt = DateTime.MaxValue;
        var tidLine = string.Empty;
        var regex = new Regex(@"\d{2}:\d{2}:\d{2}\.\d{4}");

        try
        {
            var file = new System.IO.StreamReader(args[0]);
            Console.WriteLine("Profesionalno branje logov se začenja:\n");

            using (var writer = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "log_output.txt"), true))
            {
                while ((line = file.ReadLine()) != null)
                {
                    counterLine++;
                    foreach (Match m in regex.Matches(line))
                    {
                        var dt = new DateTime();
                        if (DateTime.TryParseExact(m.Value, "HH:mm:ss.ffff", null, DateTimeStyles.None, out dt))
                        {
                            if ((dt - previousDt).TotalSeconds > 1)
                            {
                                counterTimeout++;
                                Console.WriteLine(previousLine);
                                Console.WriteLine(line + "\n\n\n");
                                writer.WriteLine(previousLine);
                                writer.WriteLine(line + Environment.NewLine);
                            }

                            previousLine = line;
                            previousDt = dt;
                        }
                    }

                }
            }

            file.Close();
            Console.WriteLine("\nBranje logov je končano. Prebrali smo: {0} vrstic ter izpisali " +
                              "{1} vrstic, kjer je bil timeout v datoteko.", counterLine, counterTimeout);
        }
        catch (Exception e)
        {
            Console.OpenStandardError();
            Console.WriteLine(e.Message);
        }

        if (args.Length < 1)
        {
            Console.OpenStandardError();
            Console.WriteLine("Uporaba: {0} LOG_FILE", AppDomain.CurrentDomain.FriendlyName);
            Console.ReadKey();
            return;
        }
    }
}
}
使用系统;
利用制度全球化;
使用System.IO;
使用System.Text.RegularExpressions;
命名空间日志分析器
{
班级计划
{
静态void Main(字符串[]参数)
{
Console.outpunecoding=System.Text.Encoding.UTF8;
var反线=0;
var counterTimeout=0;
var line=string.Empty;
var previousLine=string.Empty;
var previousDt=DateTime.MaxValue;
var tidLine=string.Empty;
var regex=newregex(@“\d{2}:\d{2}:\d{2}\.\d{4}”);
尝试
{
var file=new System.IO.StreamReader(args[0]);
Console.WriteLine(“Professionalno branje logov se začenja:\n”);
使用(var writer=newstreamwriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),“log_output.txt”),true)
{
而((line=file.ReadLine())!=null)
{
counterLine++;
foreach(正则表达式中的匹配m.Matches(行))
{
var dt=新的日期时间();
if(DateTime.TryParseExact(m.Value,“HH:mm:ss.ffff”,null,DateTimeStyles.None,out dt))
{
如果((dt-上一个dt).TotalSeconds>1)
{
计数器超时++;
控制台写入线(上一行);
Console.WriteLine(第+“\n\n\n”行);
writer.WriteLine(上一行);
writer.WriteLine(line+Environment.NewLine);
}
前一行=前一行;
以前的dt=dt;
}
}
}
}
file.Close();
Console.WriteLine(“\nBranje logov je končano.Prebrali smo:{0}vrstic ter izpisali”+
“{1}vrstic,kjer je bil timeout v datoteko.”,计数器行,计数器超时);
}
捕获(例外e)
{
Console.OpenStandardError();
控制台写入线(e.Message);
}
如果(参数长度<1)
{
Console.OpenStandardError();
WriteLine(“Uporaba:{0}日志文件”,AppDomain.CurrentDomain.FriendlyName);
Console.ReadKey();
返回;
}
}
}
}
最终结果应如下所示(对于每个TID):

/*2018年2月26日星期一13:52:08.5920*/检查“FB:SetGroupForSmartReportingKPI”(505)
/*2018年2月26日星期一13:52:08.5920*/-->已禁用--忽略筛选器
/*2018年2月26日星期一13:52:08.5930*/检查“FB:SetGroupforSmartReportingKPI_1”(510)
/*2018年2月26日星期一13:52:08.5930*/-->已禁用--忽略筛选器
/*2018年2月26日星期一13:52:08.5930*/检查“FB:SetGroupforSmartReportingKPI_2”(520)
-->已通过--执行操作
0:设置字段
/*2018年2月26日星期一13:52:08.5940*/生成准备好的报表
/*2018年2月26日星期一13:52:08.5950*/OK
/*2018年2月26日星期一13:52:08.5950*/将[5]参数绑定到准备好的报表
/*2018年2月26日星期一13:52:08.5950*/OK
/*2018年2月26日星期一13:52:08.5950*/带AR_SQL_别名$1作为(选择T72.C179、T72.C1、行号()(由T72.C1 ASC订购)作为T的“AR_行号_别名$1”
<FLTR> <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5920 */ <Filter Level:0 Number Of Filters:2> Checking "FB:SetGroupForSmartReportingKPIs" (505)
<FLTR> <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5920 */ --> Disabled -- filter is ignored
<FLTR> <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5930 */ <Filter Level:0 Number Of Filters:2> Checking "FB:SetGroupForSmartReportingKPIs_1" (510)
<FLTR> <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5930 */ --> Disabled -- filter is ignored
<FLTR> <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5930 */ <Filter Level:0 Number Of Filters:2> Checking "FB:SetGroupForSmartReportingKPIs_2" (520)
<FLTR> <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         >    --> Passed -- perform actions
<FLTR> <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         >         0 : Set Fields
<SQL > <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5940 */ Generating prepared statement
<SQL > <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5950 */ OK
<SQL > <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5950 */ Binding [5] parameters to prepared statement
<SQL > <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5950 */ OK
<SQL > <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5950 */ WITH AR_SQL_Alias$1 AS (SELECT T72.C179, T72.C1, ROW_NUMBER() OVER (ORDER BY T72.C1 ASC) AS 'AR_RowNumber_Alias$1' FROM T72 WHERE ((N'{78DF8F98-D170-48A2-A7A8-0B2E2BB6931C}' = T72.C179) AND ((T72.C41050 = N'CMDB:Total_Base_CI') OR (T72.C41050 = N'CMDB:Total_Relationship_CI')))) SELECT AR_SQL_Alias$1.C179, AR_SQL_Alias$1.C1 FROM AR_SQL_Alias$1 WHERE (AR_SQL_Alias$1.AR_RowNumber_Alias$1 BETWEEN 0 AND 3)
<SQL > <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5960 */ OK
<FLTR> <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         >               Label Group5 (40111) = 
<FLTR> <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5960 */ <Filter Level:0 Number Of Filters:3> Checking "FB:SetGroupForSmartReportingKPIs_3" (530)
<FLTR> <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         >    --> Failed qualification
<FLTR> <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5960 */ <Filter Level:0 Number Of Filters:4> Checking "FB:SetGroupForSmartReportingKPIs_4" (540)
<FLTR> <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         >    --> Failed qualification
<SQL > <TID: 0000000447> <RPC ID: 0000000000> <Queue: Admin     > <Client-RPC: 390600   > <USER:                                              > <Overlay-Group: 0         > /* Mon Feb 26 2018 13:52:08.5980 */ OK
<SQL > <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5980 */ INSERT INTO T251(C7,C40000,C40100,C40104,C40106,C40108,C40102,C40101,C40103,C40105,C40107,C40109,C2,C8,C5,C3,C6,C1) VALUES(0,N'{78DF8F98-D170-48A2-A7A8-0B2E2BB6931C}',1000000164,1000000217,1000000001,303497300,1358879400,2.00,N'2',N'TS3111 Merilni sistemi',N'Telekom Slovenije, d.d.',N'INTERNET_11894970',N'Remedy Application Service',N'x',N'Remedy Application Service',1519649528,1519649528,N'000000118010138')
<SQL > <TID: 0000000447> <RPC ID: 0072599594> <Queue: Fast      > <Client-RPC: 390619   > <USER: Remedy Application Service -- Impersonated by Remedy Application Service --> <Overlay-Group: 1         > /* Mon Feb 26 2018 13:52:08.5990 */ OK
(timeoutpattern.*[\r\n]+).*