protected override void Append(log4net.spi.LoggingEvent loggingEvent)
        {
            try
            {
                // We are not checking LogLevel -- That has been added at FilterLevel
                // in Configuration
                // Thanks : http://sitecoreblog.alexshyba.com/2010/07/sitecore-logging-part-3-adding-custom.html#more
                if (Sitecore.Context.Site != null)
                {
                    var properties = loggingEvent.Properties;

                    // By Default Everything comes as a Shell
                    // So, Here we are string RAW Message parsing it using
                    // http://blogs.msdn.com/b/simonince/archive/2009/07/09/string-unformat-i-ve-created-a-monster.aspx


                    // User is perfect!
                    if (Sitecore.Context.User != null)
                    {
                        properties["scuser"] = Sitecore.Context.User.Name;
                    }

                    if (!string.IsNullOrWhiteSpace(loggingEvent.RenderedMessage))
                    {
                        string auditRAWMessage = loggingEvent.RenderedMessage;

                        object[] ParsedValues = AuditUnformatItem(@auditRAWMessage);
                        if (ParsedValues != null && ParsedValues.Any())
                        {
                            // 0 - UserName, 1 - Action, 2 - DatabaseName
                            // 3 - ItemPath, 4 - Language, 5 - Version, 6 - ItemID
                            // 7 - Misc e.g. When you rename item you get new item name
                            // WORKFLOW : 7 - Command, 8 - Previous State
                            // 9 - Next State, 10 - User

                            SetPropertyValue(properties, ParsedValues, "scaction", 1);

                            if (properties["scaction"] != null && !string.IsNullOrWhiteSpace(Convert.ToString(properties["scaction"])) &&
                                Convert.ToString(properties["scaction"]) == "Restore")
                            {
                                return; // We don't process Restore as we don't have all details
                            }
                            SetPropertyValue(properties, ParsedValues, "scitemid", 6);

                            if (ParsedValues.Length > 2)
                            {
                                string databaseName = Convert.ToString(ParsedValues.GetValue(2));
                                if (!string.IsNullOrWhiteSpace(databaseName))
                                {
                                    Sitecore.Data.Database database =
                                        Sitecore.Configuration.Factory.GetDatabase(databaseName);
                                    if (database != null && properties["scitemid"] != null)
                                    {
                                        Sitecore.Data.Items.Item item =
                                            database.GetItem(Convert.ToString(properties["scitemid"]));
                                        if (item != null)
                                        {
                                            properties["sitename"] = item.GetContextSite().Name;
                                        }
                                    }
                                }
                            }

                            SetPropertyValue(properties, ParsedValues, "scitempath", 3);
                            SetPropertyValue(properties, ParsedValues, "sclanguage", 4);
                            SetPropertyValue(properties, ParsedValues, "scversion", 5);
                            SetPropertyValue(properties, ParsedValues, "scmisc", 7);

                            // Workflow
                            SetPropertyValue(properties, ParsedValues, "scmisc", 8, true);
                            SetPropertyValue(properties, ParsedValues, "scmisc", 9, true);
                            SetPropertyValue(properties, ParsedValues, "scmisc", 10, true);
                        }
                    }
                }
                base.Append(loggingEvent);
            }
            catch (Exception ex)
            {
                Sitecore.Diagnostics.Log.Error("Append method failed to record information", ex, this);
            }
        }