• C#使用Log Parser 2.2 + MSchart打造简易Windows日志分析工具


    前段时间做了一个简易的Windows日志分析工具(主要针对Windows系统日志SysEvent.Evt这个文件),主要是使用了Log Parser 2.2和MSchart控件,在此和大家分享一下!

    首先是Log Parser 2.2,关于它的介绍我就不多说了,下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=24659

    第一步是安装Log Parser 2.2,然后新建一个C#窗体项目,在资源管理器中选中“引用”右键“添加引用”,选择Log Parser 2.2安装目录下的“LogParser.dll”

     添加引用

    然后确定返回主窗体页面,添加一个button和一个dataGridView控件,在button的Click事件写入如下代码:

            private void button1_Click(object sender, EventArgs e)
            {
                string sql = @"SELECT EventID, TimeGenerated, SourceName, Message FROM E:\SysEvent.Evt";//此为系统日志文件路径
                DataTable dt = readFromEvt(sql);
                writeToDataBase(dt);
                dataGridView2.DataSource = dt;
                MessageBox.Show("读取完毕!");
            }
            public DataTable readFromEvt(string sql)
            {
                try
                {
                    DataTable datat = new DataTable();
                    datat.Columns.Add("事件ID", typeof(string));
                    datat.Columns.Add("日期", typeof(string));
                    datat.Columns.Add("来源", typeof(string));
                    datat.Columns.Add("描述", typeof(string)); 
                    // Instantiate the LogQuery object  
                    LogQuery oLogQuery = new LogQuery();
                    // Instantiate the Event Log Input Format object  
                    EvtInputFormat oEvtInputFormat = new EvtInputFormat();
                    // Set its "direction" parameter to "BW"  
                    oEvtInputFormat.direction = "BW";
                    // Create the query  
                    string query = sql;
                    // Execute the query  
                    LogRecordSet oRecordSet = oLogQuery.Execute(query, oEvtInputFormat);
                    while (!oRecordSet.atEnd())
                    {
                        var itemData = oRecordSet.getRecord();
                        DataRow dr = datat.NewRow();
                        dr["事件ID"] = itemData.getValue("EventID").ToString();
                        dr["日期"] = itemData.getValue("TimeGenerated").ToString();
                        dr["来源"] = itemData.getValue("SourceName").ToString();
                        dr["描述"] = itemData.getValue("Message").ToString();
                        datat.Rows.Add(dr);
                        oRecordSet.moveNext();
                    }
                    
                    // Close the recordset  
                    oRecordSet.close();
                    return datat;
                }
                catch (System.Runtime.InteropServices.COMException exc)
                {
                    MessageBox.Show("Unexpected error: " + exc.Message);
                    return null;
                } 
            }

    至此已经完成了SysEvent.Evt日志文件内容的读取,这里是读取到一个DataTable并且绑定到dataGridView控件上,其中上面代码中还有一个函数writeToDataBase(dt);主要是将这些数据写到数据库中。

    接下来是MSchart,VS2010自带这个控件,具体在工具箱数据栏下,名字是“Chart”,如果是VS2008的话还需要下载安装一下,下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=14422,安装好以后,在“工具箱”右键“选择项”,“浏览”在Microsoft Chart Controls安装目录把Assemblies下的dll都添加进去(实际只用System.Windows.Forms.DataVisualization.dll),确定返回工具箱在数据栏下就可以看到“Chart”控件,拖拽一个到窗体上,然后再加入一个button,在button的Click事件写入如下代码:

    private void button3_Click(object sender, EventArgs e)
            {
                DB db = new DB();
                string sql = @"select top 5 EventID,count(*) as Num from EvevtLog group by EventID order by count(*) desc";
                DataTable dt = db.GetDataTable(sql);
                dataGridView2.DataSource = dt;
                // Set series chart type
                Chart1.Series[0].ChartType = SeriesChartType.Bar;
                // Show as 3D
                Chart1.ChartAreas[0].Area3DStyle.Enable3D = true;
                // Draw as 3D Cylinder
                Chart1.Series[0]["DrawingStyle"] = "Cylinder";
                //Chart1.BackColor = Color.Azure; //图表背景色
                Chart1.Titles.Add("事件"); //图表标题
                //设置图表的数据源            
                Chart1.DataSource = dt;
                //设置图表Y轴对应项
                Chart1.Series[0].YValueMembers = "Num";
                //Chart1.Series[1].YValueMembers = "Volume2";
                //设置图表X轴对应项
                Chart1.Series[0].XValueMember = "EventID";
                Chart1.Series[0].IsValueShownAsLabel = true; //是否显示数据
                Chart1.Series[0].IsVisibleInLegend = false; //是否显示数据说明
                Chart1.Series[0].MarkerStyle = MarkerStyle.Circle; //线条上的数据点标志类型
                Chart1.Series[0].MarkerSize = 8; //标志大小
                Chart1.ChartAreas[0].AxisX.LineColor = Color.Blue; //X 轴颜色
                Chart1.ChartAreas[0].AxisY.LineColor = Color.Blue; //Y 轴颜色
                Chart1.ChartAreas[0].AxisX.LineWidth = 2; //X 轴宽度
                Chart1.ChartAreas[0].AxisY.LineWidth = 2; //Y 轴宽度
                Chart1.ChartAreas[0].AxisY.Title = "事件出现频率"; //Y 轴标题
                //绑定数据
                Chart1.DataBind(); 
            }

    我这里面db.GetDataTable(sql);是从数据库里抽取数据出来展示,各位其实可以按需选择,关于展示部分,Chart控件很强大,我这里只做了一个统计展示的例子,其他的各位可以深入研究一下,最后看一下效果。

    效果图
  • 相关阅读:
    开源APM应用性能管理工具调研
    Inside ARC — to see the code inserted by the compiler
    报表应用系统中怎样正确使用图表功能
    创建cifs系统案例之“实现将Windows磁盘共享至Linux”
    Eclipse快捷键 10个最有用的快捷键
    如何生成KeyStore
    android中调用系统的发送短信、发送邮件、打电话功能
    android自带theme
    Android 报错:Conversion to Dalvik format failed: Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
    Android oncreate onupgrade什么时候被调用
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6332616.html
Copyright © 2020-2023  润新知