예제 #1
0
        /// <summary>
        /// Saves records to file from the page view log that occured before the specified date
        /// </summary>
        /// <param name="beforeDate">Records older than this date are saved</param>
        private static void SavePageViewLog(DateTime beforeDate)
        {
            try
            {
                DateTime archiveTime = beforeDate.AddSeconds(-1);
                string   directory   = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data\\Logs\\");
                string   fileName    = Path.Combine(directory, string.Format("web_{0:yyyy-MM-dd}.log", archiveTime));
                using (StreamWriter fs = File.CreateText(fileName))
                {
                    //WRITE THE HEADER
                    fs.Write("#Software: AbleCommerce 7.0\r\n");
                    fs.Write("#Version: 1.0\r\n");
                    fs.Write(string.Format("#Date: {0:yyyy-MM-dd}", archiveTime) + "\r\n");
                    fs.Write("#Fields: date time c-ip cs-username s-computername s-ip s-port cs-method cs-uri-stem cs-uri-query sc-" +
                             "status time-taken cs(User-Agent) cs(Referer)\r\n");

                    string    sql           = "SELECT " + PageView.GetColumnNames(string.Empty) + " FROM ac_PageViews WHERE StoreId = @storeId AND ActivityDate < @beforeDate";
                    Database  database      = Token.Instance.Database;
                    DbCommand selectCommand = database.GetSqlStringCommand(sql);
                    database.AddInParameter(selectCommand, "@storeId", System.Data.DbType.Int32, Token.Instance.StoreId);
                    database.AddInParameter(selectCommand, "@beforeDate", System.Data.DbType.DateTime, beforeDate);
                    //EXECUTE THE COMMAND
                    using (IDataReader dr = database.ExecuteReader(selectCommand))
                    {
                        while (dr.Read())
                        {
                            PageView pageView = new PageView();
                            PageView.LoadDataReader(pageView, dr);
                            StringBuilder sb = new StringBuilder();
                            //WRITE LINE TO FILE
                            //DATE AND TIME
                            sb.Append(string.Format("{0:yyyy-MM-dd HH:mm:ss}", pageView.ActivityDate) + " ");
                            //CLIENT IP
                            sb.Append(pageView.RemoteIP + " ");
                            //USERNAME (-)
                            sb.Append("- ");
                            //SERVERNAME
                            sb.Append("127.0.0.1 ");
                            //SERVERIP
                            sb.Append("127.0.0.1 ");
                            //SERVERPORT
                            sb.Append("80 ");
                            //METHOD
                            sb.Append(pageView.RequestMethod + " ");
                            //STEM
                            sb.Append(pageView.UriStem + " ");
                            //QUERY
                            sb.Append(pageView.UriQuery + " ");
                            //STATUS
                            sb.Append("200 ");
                            //TIME
                            sb.Append(pageView.TimeTaken + " ");
                            //USERAGENT
                            sb.Append(pageView.UserAgent.Replace(" ", "+") + " ");
                            //REFERRER
                            sb.Append(pageView.Referrer + "\r\n");
                            string line = sb.ToString();
                            fs.Write(line.Replace("  ", " - "));
                        }
                        dr.Close();
                    }
                    fs.Flush();
                    fs.Close();
                }
            }
            catch
            {
                //ignore any error during logging
            }
        }