• 读取iis日志到sql server


    using Fasterflect;
    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication2
    {
        // 记录iis日志到sql server数据库中,并进行查询
        class Program_IISLogFile
        {
            static void Main(string[] args)
            {
                Console.WriteLine("开始行:");
                var startIndex = Console.ReadLine();
                Console.WriteLine("结束行:");
                var endIndex = Console.ReadLine();
                Read("D:\job\test\tu_ex151203.log", int.Parse(startIndex), int.Parse(endIndex));
    
                Console.WriteLine("over");
                Console.ReadKey();
            }
    
            // 数据库连接
            const string connectionStr = "user id=sa;password=12345;data source=(local);initial catalog=test";
    
            // 读取日志文件中的iis操作记录
            public static void Read(string path, int startIndex, int endInex)
            {
                StreamReader sr = new StreamReader(path, Encoding.Default);
                String line;
    
                using (SqlConnection conn = new SqlConnection(connectionStr))
                {
                    using (SqlCommand cmd = new SqlCommand(connectionStr, conn))
                    {
                        conn.Open();
                        int rows = 0;
                        int statIndex = 0;
                        string sql = string.Empty;
    
                        while ((line = sr.ReadLine()) != null)
                        {
                            statIndex++;
                            if (statIndex < 5 + startIndex) continue;
                            if (endInex <= statIndex - 5) break;
                            try
                            {
                                // Console.WriteLine(line.ToString());
                                string[] strs = line.ToString().Split(' ');
                                string sql2 = "";
                                if (strs != null)
                                {
                                    for (int i = 0; i < strs.Count(); i++)
                                    {
                                        sql2 += "'" + strs[i] + "'";
                                        if ((i + 1) < strs.Count())
                                        {
                                            sql2 += ",";
                                        }
                                    }
                                }
                                sql = string.Format(@"insert into [iislog]
                                                                                ([date], [time], [s-ip], [cs-method], [cs-uri-stem], [cs-uri-query], [s-port], [cs-username], 
                                                                                [c-ip], [cs(User-Agent)], [cs(Referer)], [sc-status], [sc-substatus], [sc-win32-status], [time-taken]) 
                                                                       values({0})", sql2);
    
                                cmd.CommandText = sql;
                                rows += cmd.ExecuteNonQuery();
                            }
                            catch (System.Data.SqlClient.SqlException e)
                            {
                                //conn.Close();
                                Console.WriteLine("插入" + rows.ToString() + "条数据!" + e.Message + " sql:" + sql);
                                //continue;
                            }
                            // Console.WriteLine("插入" + rows.ToString() + "条数据!");
                        }
    
                    }
                }
            }
            
            #region 数据库相关
            /* 数据库表创建语句
             CREATE TABLE [dbo].[iislog](
    	[date] [varchar](50) NULL,
    	[time] [varchar](50) NULL,
    	[s-ip] [varchar](50) NULL,
    	[cs-method] [varchar](5000) NULL,
    	[cs-uri-stem] [varchar](5000) NULL,
    	[cs-uri-query] [varchar](5000) NULL,
    	[s-port] [varchar](5000) NULL,
    	[cs-username] [varchar](5000) NULL,
    	[c-ip] [varchar](5000) NULL,
    	[cs(User-Agent)] [varchar](5000) NULL,
    	[cs(Referer)] [varchar](5000) NULL,
    	[sc-status] [varchar](5000) NULL,
    	[sc-substatus] [varchar](5000) NULL,
    	[sc-win32-status] [varchar](5000) NULL,
    	[time-taken] [varchar](5000) NULL
    )
             */
    
            /* 查询请求次数较多的url
             select [cs-uri-stem] + '?' + [cs-uri-query] as '链接地址', [sc-status] '状态码', c '请求次数' from 
    (select [cs-uri-stem], [cs-uri-query], [sc-status], count(1) c from iislog where PATINDEX('%.aspx%', [cs-uri-stem]) <> 0  group by [cs-uri-stem], [cs-uri-query], [sc-status])  tbl 
    order by  c desc, '链接地址' desc
             */
            #endregion
        }
    
    }
    


    最终效果:

  • 相关阅读:
    1.13 Flask
    1.12 Flask 复习
    1.11 flask
    1.10 flask
    1.9 flask
    1.8 flask 路由
    sql server存储过程
    Ajax学习笔记
    随机密码字典生成器
    jRazor
  • 原文地址:https://www.cnblogs.com/smallidea/p/5020320.html
Copyright © 2020-2023  润新知