Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/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# 日志解析器-通过MSUTIL查询并通过C代码读取记录_C#_Logparser - Fatal编程技术网

C# 日志解析器-通过MSUTIL查询并通过C代码读取记录

C# 日志解析器-通过MSUTIL查询并通过C代码读取记录,c#,logparser,C#,Logparser,我找到了很多关于日志解析器的线索,但没有一个能满足我的愿望 我需要通过日志解析器应用这个查询 从安全设置中选择* 获取事件行,然后逐行读取,知道我访问哪个列 请帮忙 应该记录的内容: 1.使用MSUTIL库通过LogParser.dll查询Windows事件 2.将行放入任何容器中 3.逐行阅读 4.能够分离行的每个单元格,并像访问事件id列或消息列一样分别读取它们 -回答这个问题 有些东西,但我没有得到, 例如,这个人使用这个,取单行,但我需要多行,我想知道接下来要转换什么:|我需要使用什么类

我找到了很多关于日志解析器的线索,但没有一个能满足我的愿望

我需要通过日志解析器应用这个查询 从安全设置中选择*

获取事件行,然后逐行读取,知道我访问哪个列

请帮忙

应该记录的内容: 1.使用MSUTIL库通过LogParser.dll查询Windows事件 2.将行放入任何容器中 3.逐行阅读 4.能够分离行的每个单元格,并像访问事件id列或消息列一样分别读取它们

-回答这个问题 有些东西,但我没有得到, 例如,这个人使用这个,取单行,但我需要多行,我想知道接下来要转换什么:|我需要使用什么类

LogQueryClass logger = new LogQueryClassClass();
            COMIISW3CInputContextClass inputContext = new COMIISW3CInputContextClassClass();
            string query = // i change it during test
            ILogRecord record = logger.Execute(query, inputContext).getRecord();
或者另一个用法是:似乎也返回单一结果

// prepare LogParser Recordset & Record objects
            ILogRecordset rsLP = null;
            ILogRecord rowLP = null;

            LogQueryClassClass LogParser = null;
            COMW3CInputContextClassClass W3Clog = null;

            double UsedBW = 0;
            int Unitsprocessed;
            double sizeInBytes;

            string strSQL = null;

            LogParser = new LogQueryClassClass();
            W3Clog = new COMW3CInputContextClassClass();

            try
            {
                //W3C Logparsing SQL. Replace this SQL query with whatever 
                //you want to retrieve. The example below 
                //will sum up all the bandwidth
                //Usage of a specific folder with name 
                //"userID". Download Log Parser 2.2 
                //from Microsoft and see sample queries.

                strSQL = //the query (i changed it during test)

                // run the query against W3C log
                rsLP = LogParser.Execute(strSQL, W3Clog);

                rowLP = rsLP.getRecord();

                Unitsprocessed = rsLP.inputUnitsProcessed;

                if (rowLP.getValue(0).ToString() == "0" ||
                    rowLP.getValue(0).ToString() == "")
                {
                    //Return 0 if an err occured
                    UsedBW = 0;
                    return UsedBW;
                }

                //Bytes to MB Conversion
                double Bytes = Convert.ToDouble(rowLP.getValue(0).ToString());
                UsedBW = Bytes / (1024 * 1024);
我找到的最好的查询是这个,它在注册表中搜索我没有原始查询,因为我更改了它

ILogRecordset rs = null;
            try
            {
                LogQueryClass qry = new LogQueryClass();
                COMRegistryInputContextClass registryFormat = new COMRegistryInputContextClass();
                string query = //Chnaged it
                rs = qry.Execute(query, registryFormat);
                for (; !rs.atEnd(); rs.moveNext())
                    Console.WriteLine(rs.getRecord().toNativeString(","));
            }
            finally
            {
                rs.close();
            }
还有一些东西似乎不是以活动对象的形式将数据返回到SQL:|

因为我要编写服务,所以我希望对exchange数据的数据库拥有尽可能少的访问权限,只存储当前数据 -编辑: 让我补充一下,我使用passinglog parser.exe参数进行的查询是这样的,但在服务内部调用exe文件对我来说太粗鲁了

myProc.StartInfo.Arguments = " \"select * INTO AuditLogParser from \\\\" + Dns.GetHostName() +
                                         "\\security WHERE TimeGenerated >= '" + startDate +
                                         "' and TimeGenerated <'" + endDate +
                                         "' and (eventid=560 or eventid=540)\" -o:SQL -server:\"" +
                                         Dns.GetHostName() +
                                         "\\sqlexpress\"  -database:SecurityLog -driver:\"SQL Server\" -username:TrainAudit -password:Password.110 -createtable:OFF";

下面的示例代码使用LogParser从名为C:\Bat的本地目录中读取文件名和大小


请注意,我可以通过查询中的列名称或列索引来访问该列。

注释没有容量,并且它不允许我在8小时内发布答案:|我执行编辑,检查主postBTW,您不认为解析到文件中是不礼貌的:|我想要的不是将数据存储到文件中,我想要像我的第三个示例一样,以此行开头的一行:ILogRecordset rs=null;但是作为你的例子,有索引输出,或者类实例输出…嗯?这不会解析为文件。上面的代码获取一个记录集并在其上循环。你还想要什么?啊哈,sry,它是从一个文件中读取的:D哇,顺便说一句,这个日志解析器非常强大,我看到用户到处使用它:-斯曼,顺便说一句,这是COMFileSystemInputContextClass,我想通过系统事件表进行查询,这是在安全性中,现在我应该使用什么类?我通过logparser2.2.exe作为参数进行的查询是:\select*进入AuditLogParser,从\\\\\+Dns.GetHostName+\\security,其中TimeGenerated>='+startDate+'和TimeGenerated我将分别猜测COMEventLogInputContextClass和COMSYSLOGOutputContextClass。
LogQueryClass logQuery = new LogQueryClassClass();

COMFileSystemInputContextClass inputFormat = new COMFileSystemInputContextClassClass();
inputFormat.recurse = 0;

String strQuery = @"SELECT Name, Size FROM 'C:\Bat\*.*' ORDER BY Name ASC";

ILogRecordset results = logQuery.Execute(strQuery, inputFormat);
while (! results.atEnd())
{
    Console.WriteLine(String.Format("File: {0} Size: {1}", results.getRecord().getValue("Name"), results.getRecord().getValue(1)));
    results.moveNext();
}