代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
CSharp
】
IIS6.0日志文件分析代码_3线程读取文件到数据库
作者:
xqf222
/ 发布于
2014/2/25
/
505
IIS6.0日志文件分析代码_3线程读取文件到数据库
IIS6.0日志文件分析代码_3线程读取文件到数据库(已经测试),只是欠缺将日志文件批量入库.定义一个数组.存储文件列表.按顺序读取文件到数据库中就好了.复习了线程操作.数组控制.文件访问,数据库操作等等关键技术. //针对批量日志文件处理思路: //方法一:单线程单文件处理 //1.选择日志文件所在目录,将所有的日志文件列表名称,处理结果状态,当前处理状态存入数据表中 //2.开启单线程日志列表文件数据表中读取文件名,将所有的日志字段名称定义到数组中,按读取行文本文件中日志相关记录行数分段将读取的将对应的全部字段内容写入到数据表中并更新 //3.循环读取该文件日志数据直到完成,将处理结果写入到数据库中 //方法二单线程多文件处理 //1.选择日志文件目录,遍历目录下所有的日志文件(除开今天的),将所有文件路径写入到数组中 //2.开启线程循环根据传入参数(单独的日志文件路径)将日志记录写到数据库表中 //3.线程读取日志文件结束,返回结果变量,继续从数组中获取下一条日志文件数据,循环直到完成全部日志文件的数据读取 //方法三单线程多文件处理 //1.打开对话框选择要读取的日志文件,根据所在目录名称的区分不同IIS站点. //2.开启单线程依次读取日志文件内容到数据库中 //3.线程读取完成.停留一段时间后继续读取.直到将所有的日志文件内容写入数据库完成. //方法四 //1.选择日志文件列表,将所有日志文件备份处理成固定格式的文本文件,将文本文件作为数据源,按数据库定义的字段名成读入到数据表中,测试处理日志文件大小3.380M.日志行20434,文件 //备注:开启线程作用,可以显示当前日志处理的进度,可以防止程序运行时候出现“假死”或者“卡死”现象。 //预先处理日志文件数据成有效格式的文本文件作用可以减少数组跟数据判断的时间内存支出现象。 //添加数据库文件IO引用 using System.IO; using System.Text; using System.Data; using System.Data.SqlClient; //使用线程操作的引用 using System.Threading; //按钮事件 private void button6_Click(object sender, System.EventArgs e) { //开始线程下载文件:稳定性能比较好,不出现卡死的情况,线程监督要继续突出显示 this.button6.Enabled=false; IISLogFileClass myClass=new IISLogFileClass(); Thread myThread= new Thread(new ThreadStart(myClass.ReadFromLogFile)); myClass.LogFilePath=@"C:/WINDOWS/system32/LogFiles/W3SVC1/ex070412.log"; myThread.Start(); if(myThread.Join(50000))//主线程等待子线程的停止时间单位:毫秒 { this.textBox2.Text=myClass.LogFilePath; this.textBox3.Text=myClass.LineContent.ToString(); this.textBox4.Text=myClass.LineFile.ToString(); this.textBox5.Text=myClass.FileLength.ToString(); } this.button6.Enabled=true; } //定义日志文件处理类. public class IISLogFileClass { public string LogFilePath;//下载文件保存地址 public long FileLength;//定义线程返回传参数 public int LineSoftware=0;//定义线程返回传参数 public int LineVersion=0;//定义线程返回传参数 public int LineDate=0;//定义线程返回传参数 public int LineFields=0;//定义线程返回传参数 public int LineContent=0;//定义线程返回传参数 public int LineFile=0;//定义线程返回传参数 public void ReadFromLogFile() { //针对大日志文件处理思路: //1.将所有的日志字段名称定义到数组中,将对应的全部字段内容写入到文本文件中 //2.将文本文件作为数据源,把所有字段的内容一条一条的作为记录写入到数据库中对应字段里 //定义要添加的字段数量 int totalFieldsLength=0; //定义字段下标数组,数据库中的内容必须跟下面的数组中一致 ArrayList IntLogFieldsArray=new ArrayList(); try { //打开数据库连接 string strCon = "Initial Catalog='HMMISDATA';Server='192.168.1.250';User ID='XQF';Password='123456';Persist Security Info=True"; SqlConnection myConn = new SqlConnection ( strCon ) ; myConn.Open(); DataSet tempDataSet=new DataSet(); SqlDataAdapter tempAdapter = new SqlDataAdapter("SELECT * FROM IISLogFiledsList WHERE 1=0", myConn); SqlCommandBuilder tempBuilder=new SqlCommandBuilder(tempAdapter); tempAdapter.Fill(tempDataSet); FileStream fs = new FileStream(LogFilePath, FileMode.OpenOrCreate, FileAccess.Read); //打开日志文件 FileLength=fs.Length; StreamReader myStreamReader=new StreamReader(fs);//使用StreamReader类来读取文件 myStreamReader.BaseStream.Seek(0,SeekOrigin.Begin);//循环从数据流中读取每一行,直到文件的最后一行 string strLine=myStreamReader.ReadLine(); ArrayList MySoftwareArray=new ArrayList(); ArrayList MyVersionArray=new ArrayList(); ArrayList MyDateArray=new ArrayList(); ArrayList MyFieldsArray=new ArrayList(); while(strLine!=null) { LineFile+=1; if(strLine.Substring(0,10)=="#Software:") { LineSoftware+=1; MySoftwareArray.Add(strLine.Substring(10,strLine.Length-10)); } else { if(strLine.Substring(0,9)=="#Version:") { LineVersion+=1; MyVersionArray.Add(strLine.Substring(9,strLine.Length-9)); } else { if(strLine.Substring(0,6)=="#Date:") { LineDate+=1; MyDateArray.Add(strLine.Substring(6,strLine.Length-6)); } else { if(strLine.Substring(0,8)=="#Fields:") { LineFields+=1; MyFieldsArray.Add(strLine.Substring(9,strLine.Length-9)); if(LineFields==1) { //定义要添加的记录字段名称 string strt=MyFieldsArray[0].ToString(); string[] tArray=strt.Split(' '); totalFieldsLength=tArray.Length; for(int k=0;k<totalFieldsLength;k++) { switch(tArray[k].ToString()) { case "date":IntLogFieldsArray.Add(1);break; case "time":IntLogFieldsArray.Add(2);break; case "c-ip":IntLogFieldsArray.Add(3);break; case "cs-username":IntLogFieldsArray.Add(4);break; case "s-sitename":IntLogFieldsArray.Add(5);break; case "s-computername":IntLogFieldsArray.Add(6);break; case "s-ip":IntLogFieldsArray.Add(7);break; case "s-port":IntLogFieldsArray.Add(8);break; case "cs-method":IntLogFieldsArray.Add(9);break; case "cs-uri-stem":IntLogFieldsArray.Add(10);break; case "cs-uri-query":IntLogFieldsArray.Add(11);break; case "sc-status":IntLogFieldsArray.Add(12);break; case "sc-substatus":IntLogFieldsArray.Add(13);break; case "sc-win32-status":IntLogFieldsArray.Add(14);break; case "sc-bytes":IntLogFieldsArray.Add(15);break; case "cs-bytes":IntLogFieldsArray.Add(16);break; case "cs-version":IntLogFieldsArray.Add(17);break; case "cs-timetaken":IntLogFieldsArray.Add(18);break; case "cs-host":IntLogFieldsArray.Add(19);break; case "cs(User-Agent)":IntLogFieldsArray.Add(20);break; case "cs-cookie":IntLogFieldsArray.Add(21);break; case "cs-referer":IntLogFieldsArray.Add(22);break; } } } } else { LineContent+=1; string[] currentContentArray=strLine.Split(' '); //循环将所有日志记录写入数据库中 DataRow tempDataRow = tempDataSet.Tables[0].NewRow();//定义新记录行 for(int n=0;n<totalFieldsLength-1;n++) { tempDataRow[Int32.Parse(IntLogFieldsArray[n].ToString())]=currentContentArray[n]; //Console.WriteLine(IntLogFieldsArray[n].ToString()+":"+LogArrayList[m,n]); } tempDataSet.Tables[0].Rows.Add(tempDataRow);//添加新记录行 } } } } strLine=myStreamReader.ReadLine(); } myStreamReader.Close();//关闭此StreamReader对象 fs.Close(); tempAdapter.Update(tempDataSet); myConn.Close ( ) ;//关闭连接 // 清除掉所有数组内容 MySoftwareArray=null; MyVersionArray=null; MyDateArray=null; MyFieldsArray=null; } catch(Exception ex) { MessageBox.Show(ex.Message,"错误"); } } //定义类代码结束
试试其它关键字
IIS6.0日志
同语言下
.
文件IO 操作类库
.
Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,P
.
机器名和IP取得(IPV4 IPV6)
.
Tiff转换Bitmap
.
linqHelper
.
MadieHelper.cs
.
RegHelper.cs
.
如果关闭一个窗体后激活另一个窗体的事件或方法
.
创建日志通用类
.
串口辅助开发类
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
xqf222
贡献的其它代码
(
82
)
.
VB编写的登录局域网内的sql2000数据库服务器
.
ASP .NET登录界面用户验证码
.
VB操作ACCESS数据库
.
批量发送邮件程序
.
批量抓取网页代码中的HTTP和邮件地址
.
禁止站外提交参数测试
.
FTP网站文件到本地的
.
调用对应的应用程打开文件
.
抓取邮件内容解析
.
保存文件时候的弹出选择要保存的文件夹带新建文件夹效
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3