读取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):大容量日志恢复模式里的日志管理
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
随机推荐
- iOS 项目审核被拒原因汇总
1.程序运行崩溃 Your app crashes on iPhone running iOS connected to an IPv6 network when we: - app crashes ...
- IIS与JIRA的反向代理配置
JIRA配置修改 JIRA与IIS ARR的集成,除了上篇(Visual SVN IIS反向代理设置)中讲到的基本的ARR配置之外,还需要在JIRA安装目录的conf\server.xml文件中做一个 ...
- ubuntu下安装redis
(1)进去 /usr/local目录下 cd /usr/local 若没有local这个文件夹则创建一个 sudo mkdir /usr/local sudo chmod 777 ...
- vb.net之窗体继承
相信很多自己动手敲过完整程序的同学都会发现,其实我们敲的很多窗体布局都非常的相似,有的部分用到的控件甚至一模一样,如果每一个窗体都自己重新摆放或者复制粘贴虽然没有问题,但是有时候若是修改其中一小点位置 ...
- mount: unknown filesystem type 'LVM2_member'解决方案
系统启动到request_module: runaway loop modprobe binfmt-464c挂起 利用U盘系统,挂载硬盘出现:mount: unknown filesystem typ ...
- C之文件读写
1.fopen() fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此 ...
- EL表达式获取数据
EL 全名为Expression Language. EL主要作用 获取数据: •EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据.(某个web域 ...
- WPF button 如何区分click和doubleclick
WPF button 同时处理两个事件时候会先触发click事件,触发doubleclick事件 ,那如何区分呢,可以这样设置: private static DispatcherTimer myC ...
- ReactiveCocoa比较区分replay, replayLast和replayLazily
一直搞不清楚replayLazily和replay的区别可以直接跳到最后看. 原文:http://spin.atomicobject.com/2014/06/29/replay-replaylast- ...
- VSS汉化后出现问题及解决方法
1.vss汉化后在获取项目时不递归获取? 解决方法:工具-->选项-->常规-->勾选 项目递归时有效(R) 2.查看差异,可视化窗口未出现分隔? 解决方法:差异选项-->格式 ...