/// <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 } }