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
} }

最终效果:

读取iis日志到sql server的更多相关文章

  1. 通过日志恢复SQL Server的历史数据

    通过日志恢复SQL Server的历史数据 Posted on 2008-11-14 21:47 代码乱了 阅读(4658) 评论(10)  编辑 收藏 园子里前段时间发过一篇通过日志恢复MSSQL数 ...

  2. C#检验IIS版本、SQL Server版本、SilverLight版本

    之前做一个小项目,使用C#检验这些软件的版本,到处找了一些代码,也能作用,记录一下,以防以后用到. 一.检验IIS版本 public static bool checkIIS(string destV ...

  3. asp.net core 2.1 增加Nlog日志到sql server数据库

    一.增加引用 <PackageReference Include="NLog.Extensions.Logging" Version="1.2.1" /& ...

  4. SQL Server 错误日志过滤(ERRORLOG)

    一.背景 有一天我发现SQL Server服务器的错误日志中包括非常多关于sa用户的登陆错误信息:“Login failed for user 'sa'. 原因: 评估密码时出错.[客户端: XX.X ...

  5. 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结

    为什么说JAVA中要慎重使用继承   这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...

  6. SQL Server中的事务日志管理(9/9):监控事务日志

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  7. SQL Server代理(5/12):理解SQL代理错误日志

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这个系列的前几篇文章所见,SQL ...

  8. 如何解读SQL Server日志(1/3)

    SQL Server 的事务日志包含所有数据修改的操作记录.分析日志一般作为解决某些问题的最后手段,如查看某些意外的修改.理解和分析日志内容是件非常困难的事情,fn_dblog通常会输出非常多的数据, ...

  9. SQL Server中的事务日志管理(6/9):大容量日志恢复模式里的日志管理

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

随机推荐

  1. Java Script基础(二) 基本语法

    一.变量的声明和使用 JavaScript是一种弱类型的语言,没有明确的数据类型,在声明变量时,不需要指定变量的类型,变量的类型由赋给变量的值决定. 变量声明的语法: var 变量名; 示例: var ...

  2. js将人民币金额转换为大写

    function upDigit(n) { var fraction = ['角', '分']; var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒' ...

  3. oracle数据操纵语言(DML)data manipulation language

    数据库操纵语言(DML)用于查询和操纵模式对象中的数据,它不隐式地提交当前事务. SELECTINSERTUPDATEDELETECALLEXPLAIN PLANLOCK TABLEMERGE使用算术 ...

  4. DNS的递归查询和迭代查询

    百度运维部二面,直接懵逼的节奏 (1)递归查询 递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求, 必须使用一个准确的查询结果回复客户机. 如果DNS 服务器本地没有存 ...

  5. Could not load the "btn_020.disable.png" image referenced from a nib in the bundle with identifier "com.xxx.---0710"

    照此方法打开引用你这个图片的sb或者xib: 然后搜索你的这个图片名称: 删除这个图片名称的引用.如果还是不行的话,就删除此sb或xib文件然后重新创建.

  6. CSS - 实现文字显示过长时用省略

    一.添加-文字显示超出范围时隐藏属性 overflow:hidden; 二.添加-超出文字省略号属性 text-overflow:ellipsis; 三.添加-文字不换行属性 white-space: ...

  7. asp.net获取select值的方法

    如何使用asp.net获取select值?搜索中发现一个不错的例子,在此与大家分享. 代码: <select runat="server" class="xgxxb ...

  8. 二.CSS的伪类

    CSS的伪类(Pseudo-classes)分为两种:UI伪类和结构化伪类,伪类一般用于向某些选择器添加特殊的效果,伪类选择符用"  : "进行标示,如果是“ ::  ” 表示CS ...

  9. BaseAdapter&ArrayAdapter在ListView中应用

    一:BaseAdapter:共同实现的基类的适配器,是ArrayAdapter SimpleAdapter等的父类, 一般用于比较复杂的ListView,扩展性强. 详细信息可查看谷歌官方API:ht ...

  10. HDU 5478 Can you find it(快速幂)

    Problem Description Given a prime number C(1≤C≤2×105), and three integers k1, b1, k2 (1≤k1,k2,b1≤109 ...