zoukankan      html  css  js  c++  java
  • 实现日志文件直接导入数据库

    现在我要实现一个功能,把日志文件直接导入到数据库,搜索了一下资料,实现了这功能,现在写一个小Dome。我操作的数据库是SQL Server

    一、封装了一个将日志文件读取成List集合的方法

            /// <summary>
            /// 读取文本文件转换为List 
            /// </summary>
            /// <param name="fileName">文件路径</param>
            /// <returns>返回list集合</returns>
            public List<string> ReadTextFileToList(string fileName)
            {
                List<string> list = new List<string>();
                MemoryStream ms = new MemoryStream(File.ReadAllBytes(fileName));
                using (StreamReader sr = new StreamReader(ms, Encoding.GetEncoding("GB2312")))
                {
                    try
                    {
                        while (sr.Peek() > -1)
                        {
                            string info = sr.ReadLine();
                            list.Add(info);
                        }
                    }
                    catch (Exception ex) { sr.Close(); throw ex; }
                }
                return list;
            }

    二、封装DataTable导入数据库的方法

            /// <summary>
            ///DataTable数据导入数据库 
            /// </summary>
            /// <param name="connStr">导入的数据库连接字符串</param>
            /// <param name="dt">数据源DataTable</param>
            /// <returns></returns>
            public bool InsertData(string connStr, DataTable dt)
            {
                using (SqlConnection conn = new SqlConnection(connStr))
                {
                    using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connStr, SqlBulkCopyOptions.UseInternalTransaction))
                    {
                        try
                        {
                            //一次批量的插入的数据量 
                            sqlbulkcopy.BatchSize = 10000;
                            sqlbulkcopy.DestinationTableName = "Ratings";//服务器上目标表名称
                            for (int i = 0; i < dt.Columns.Count; i++)
                            {
                                sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);//列映射
                            }
                            sqlbulkcopy.WriteToServer(dt);//批量写入
                            return true;
                        }
                        catch (System.Exception ex)
                        {
                            return false;
                            throw ex;
                        }
                    }
                }
            }

    三、实现日志文件导入到数据库

                ReadList readList = new ReadList();
                //调用ReadList类里面的ReadTextFileToList方法,实现日志文件转list
                List<string> list = readList.ReadTextFileToList(@"E:BaiduYunDownloaoupeng_requests.2016-04-21T00.uf01-08.log");
                DataTable dt = new DataTable();//构造数据源
                dt.Columns.Add("TIMESTAMP");
                dt.Columns.Add("IP_PORT");
                dt.Columns.Add("OUPENG_UID");
                dt.Columns.Add("IMEI");
                dt.Columns.Add("APPLICATION");
                dt.Columns.Add("APP_SENT_BYTES");
                dt.Columns.Add("APP_RECEIVED_BYTES");
                dt.Columns.Add("HTTP_METHOD");
                dt.Columns.Add("HTTP_STATUS_CODE");
                dt.Columns.Add("URL");
                dt.Columns.Add("USER_AGENT");
                foreach (string item in list)
                {
                    item.Trim();//去除前后空格
                    string[] strs = item.Split('    ');//我的日志文件字段直接是空格分割的
                    DataRow dr = dt.NewRow();//创建数据行
                    for (int j = 0; j < strs.Length; j++)
                    {
                        //j = 9主要我的日志文件,这个字段太长了,没办法只能截取处理了
                        if (j == 9)
                        {
                            int Length = strs[j].ToString().Length;
                            if (Length < 100)
                            {
                                dr[j] = strs[j].ToString().Substring(0, Length);
                            }
                            else
                                dr[j] = strs[j].ToString().Substring(0, 100);
                        }
                        else
                            dr[j] = strs[j];
    
                    }
                    dt.Rows.Add(dr);//将创建的数据行添加到table中
                }
                string connStr = "Data Source=.;Initial Catalog=ReadLog;Integrated Security=True";//数据库连接字符串
                if (InsertData(connStr, dt))//DataTable数据导入数据库 
                    MessageBox.Show("操作成功!");
                else
                    MessageBox.Show("操作失败!");

    四、功能基本实现了

  • 相关阅读:
    20181022-JSP 开发环境搭建
    20181019-JSP 教程/简介
    20180829-Java多线程编程
    20180827(02)- Java发送邮件
    20180827-Java网络编程
    20180912-Java实例02
    docker安装redis
    springboot2集成swagger2出现guava包下的FluentIterable.append方法找不到
    Linux Centos7 网络设置UUID号的修改方法
    CentOS 7 主机名bogon解决办法
  • 原文地址:https://www.cnblogs.com/zhangjd/p/5676408.html
Copyright © 2011-2022 走看看