Today I added the following changes to the solution:
1 – Added a ReplicatorLogger Class to the solution.
2 – Updated the Feature Receiver code to create a Replicator logger list in the Web.
3 – Updated the ItemUpdated method in the Event Receiver to write to the Replicator Logger list when an item is added or updated.
The following code is the new ReplicatorLogger Class:
internal class ReplicatorLogger
 {
publicvoid writeToLog(string title, string logDate, string modifiedBy, string action, string copySource, string fileName, SPWeb web)
{
 // Get the current httpcontext
 System.Web.HttpContext currentContext = System.Web.HttpContext.Current;
 // Set the httpcontext to null;
 HttpContext.Current = null;
 using (web)
{
 try
 {
 // Create an item the Replicator Logger list to record the event
 SPList spList = web.Lists[“Replicator Logger”];
 SPListItem logItem = spList.Items.Add();
logItem[“Title”] = title;
logItem[“Log Date”] = logDate;
logItem[“Modified By”] = modifiedBy;
logItem[“Action”] = action;
logItem[“Copy Source”] = copySource;
logItem[“File Name”] = fileName;
logItem.Update();
 }
 catch (SPException spEx)
{
 }
 finally
 {
 // Set the httpcontext back to the original
 System.Web.HttpContext.Current = currentContext;
}
}
}
}
The following code was added to the Feature Receiver to create the Replicator logger list:
 // Create the replicator logging list
 spWeb.Lists.Add(“Replicator Logger”, “Document Library Replicator Logging List”, spWeb.ListTemplates[“Custom List”]);
 SPList replicatorLoggingList = spWeb.Lists[“Replicator Logger”];
replicatorLoggingList.NoCrawl =Â true;
replicatorLoggingList.Fields.Add(“Log Date”, SPFieldType.Text, true);
replicatorLoggingList.Fields.Add(“Modified By”, SPFieldType.Text, true);
replicatorLoggingList.Fields.Add(“Action”, SPFieldType.Text, true);
replicatorLoggingList.Fields.Add(“Copy Source”, SPFieldType.Text, true);
replicatorLoggingList.Fields.Add(“File Name”, SPFieldType.Text, true);
replicatorLoggingList.Update();
 // Update the default view to show the new fields
SPView spLogView = replicatorLoggingList.DefaultView;
spLogView.ViewFields.Add(“Log Date”);
spLogView.ViewFields.Add(“Modified By”);
spLogView.ViewFields.Add(“Action”);
spLogView.ViewFields.Add(“Copy Source”);
spLogView.ViewFields.Add(“File Name”);
spLogView.Update();
The code below updates the Event Receiver to also write the properties to the Replicator Logger list:
public overridevoid ItemUpdated(SPItemEventProperties properties)
{
 base.ItemUpdated(properties);
 using (SPSite spsite = newSPSite(properties.WebUrl))
 try
 {
EventFiringEnabled = false;
 if (properties.ListItem.ParentList.Title != “Replicator Logger”)
{
 SPWeb siteForLogger = spsite.OpenWeb();
 // determine target filename – the same as the source
 string targetfilename = properties.ListItem.Name.ToString();
 string SourceLib = properties.WebUrl + “/” + properties.ListItem.ParentList.ToString();
  // Copy the file to the destination library (targetlibrary)
 properties.ListItem.File.CopyTo(properties.WebUrl + “/” + “targetlibrary” + “/” + targetfilename, true
);
 // Write to the Replicator Log – in test mode…
 ReplicatorLogger replogger = newReplicatorLogger();
 // Get the current Date and Time
 DateTime dtime = DateTime.Now;
 // Create the title for the logger list item
 string title = (dtime.Date.ToString() + “_” + dtime.Hour.ToString() + “_” + dtime.Minute.ToString() + “_” + dtime.Second.ToString() + “_” + targetfilename.ToString());
 // Write the information to the logger list
 EventFiringEnabled = false;
replogger.writeToLog(title, dtime.ToShortDateString(), properties.UserDisplayName.ToString(),“New/Updated Document”, SourceLib, targetfilename, siteForLogger);
}
}
catch (SPException spEx) { }
 finally
 {
  // Enable Event Firing
 EventFiringEnabled = true;
}
}
Here is an example of the item created in the Replicator Logger list when an item is uploaded or updated:
