/// <summary> /// Saves records to file from the audit log that occured before the specified date /// </summary> /// <param name="beforeDate">Records older than this date are saved</param> private static void SaveAuditLog(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("audit_{0:yyyy-MM-dd}.log", archiveTime)); using (StreamWriter fs = File.CreateText(fileName)) { //WRITE HEADER TO FILE STREAM fs.WriteLine("AuditEventId,StoreId,EventDate,EventTypeId,Successful,UserId,RelatedId,RemoteIP,Comment"); string sql = "SELECT " + AuditEvent.GetColumnNames(string.Empty) + " FROM ac_AuditEvents WHERE StoreId = @storeId AND EventDate < @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()) { AuditEvent logEntry = new AuditEvent(); AuditEvent.LoadDataReader(logEntry, dr); StringBuilder sb = new StringBuilder(); //SAVE RECORD TO FILE sb.Append(logEntry.AuditEventId + ","); sb.Append(logEntry.StoreId + ","); sb.Append(string.Format("{0:yyyy-MM-dd HH:mm:ss},", logEntry.EventDate)); sb.Append(logEntry.EventTypeId + ","); sb.Append((logEntry.Successful ? "1" : "0") + ","); sb.Append(logEntry.UserId + ","); sb.Append(logEntry.RelatedId + ","); sb.Append(logEntry.RemoteIP + ","); if (logEntry.Comment.Contains(",")) { sb.Append("\"" + logEntry.Comment.Replace("\"", "\"\"") + "\""); } else { sb.Append(logEntry.Comment); } fs.WriteLine(sb.ToString()); } dr.Close(); } fs.Flush(); fs.Close(); } } catch { //ignore any error during logging } }