读取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
} }
最终效果:

读取iis日志到sql server的更多相关文章
- 通过日志恢复SQL Server的历史数据
通过日志恢复SQL Server的历史数据 Posted on 2008-11-14 21:47 代码乱了 阅读(4658) 评论(10) 编辑 收藏 园子里前段时间发过一篇通过日志恢复MSSQL数 ...
- C#检验IIS版本、SQL Server版本、SilverLight版本
之前做一个小项目,使用C#检验这些软件的版本,到处找了一些代码,也能作用,记录一下,以防以后用到. 一.检验IIS版本 public static bool checkIIS(string destV ...
- asp.net core 2.1 增加Nlog日志到sql server数据库
一.增加引用 <PackageReference Include="NLog.Extensions.Logging" Version="1.2.1" /& ...
- SQL Server 错误日志过滤(ERRORLOG)
一.背景 有一天我发现SQL Server服务器的错误日志中包括非常多关于sa用户的登陆错误信息:“Login failed for user 'sa'. 原因: 评估密码时出错.[客户端: XX.X ...
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
为什么说JAVA中要慎重使用继承 这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...
- SQL Server中的事务日志管理(9/9):监控事务日志
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
- SQL Server代理(5/12):理解SQL代理错误日志
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这个系列的前几篇文章所见,SQL ...
- 如何解读SQL Server日志(1/3)
SQL Server 的事务日志包含所有数据修改的操作记录.分析日志一般作为解决某些问题的最后手段,如查看某些意外的修改.理解和分析日志内容是件非常困难的事情,fn_dblog通常会输出非常多的数据, ...
- SQL Server中的事务日志管理(6/9):大容量日志恢复模式里的日志管理
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
随机推荐
- 计算运行时间工具timeit
Table of Contents 1. timeit的功能和用法 2. 其它 3. 参考资料 timeit的功能和用法 timeit 模块提供了测试一小段代码运行时间的功能.我前面有一篇文章用它来测 ...
- iOS缓存框架-PINCache解读
文/Amin706(简书作者)原文链接:http://www.jianshu.com/p/4df5aad0cbd4著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 在项目中总是需要缓存一 ...
- IIS 之 HTTP 错误 404.3 - Not Found(由于扩展配置问题而无法提供您请求的页面...)
错误如下图所示: 其实在IIS7中肯定能支持的的,只是我们在Win7中安装IIS7的时候没有勾选这些功能,具体方法如下: 1.依次打开" 控制面板→程序→程序和功能→打开或关闭Windwos ...
- 1.7.7 Spell Checking -拼写检查
1. SpellCheck SpellCheck组件设计的目的是基于其他,相似,terms来提供内联查询建议.这些建议的依据可以是solr字段中的terms,外部可以创建文本文件, 或者其实lucen ...
- Java基础知识强化之IO流笔记72:NIO之 NIO核心组件(NIO使用代码示例)
1.Java NIO 由以下几个核心部分组成: Channels(通道) Buffers(缓冲区) Selectors(选择器) 虽然Java NIO 中除此之外还有很多类和组件,Channel,Bu ...
- 【Mood-17】 github中在本地进行上传的时候出现ERROR: Repository not found. fatal: The remote end hung up unexpectedly
一开始出现这个错误的时候还感觉很奇怪,我明明在在本地中相应的库文件夹命令中输入: vim ./git/config 将文件中的 [remote “origin"]部分去掉!
- 【python,threading】python多线程
使用多线程的方式 1. 函数式:使用threading模块threading.Thread(e.g target name parameters) import time,threading def ...
- C# .net 使用 SmtpClient 发邮件 ,发送邮箱的配置
1.需打开POP3/SMTP/IMAP 2.打开时要求授权码,输入自定义的密码如:1234cb 3.自定义的密码就是 SmtpClient 的密码,而非邮箱密码
- Umbraco(7)-The Navigation Menu And A Parent Page with Infinite Children
原文链接:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/umbraco7the-navigation-menu-and-a-par ...
- input美化 checkbox和radio样式
input美化 checkbox和radio样式 看惯了input[checkbox]和input[radio]默认样式,有没有想要改变一下呢?比如下面的样式: 比起html默认的样式,上图这些 ...