adding extension points for revising logged content
diff --git a/src/log4net/Core/LoggingEvent.cs b/src/log4net/Core/LoggingEvent.cs
index 8abb555..cf228a7 100644
--- a/src/log4net/Core/LoggingEvent.cs
+++ b/src/log4net/Core/LoggingEvent.cs
@@ -680,6 +680,7 @@
         public object MessageObject
         {
             get { return m_message; }
+            protected set { m_message = value; }
         }
 
         /// <summary>
@@ -743,7 +744,7 @@
         /// The collected information is cached for future use.
         /// </para>
         /// </remarks>
-        public string RenderedMessage
+        public virtual string RenderedMessage
         {
             get
             {
@@ -785,7 +786,7 @@
         /// to be accessed multiple times then the property will be more efficient.
         /// </para>
         /// </remarks>
-        public void WriteRenderedMessage(TextWriter writer)
+        public virtual void WriteRenderedMessage(TextWriter writer)
         {
             if (m_data.Message != null)
             {
@@ -1357,7 +1358,7 @@
         /// It is not possible to 'unfix' a field.
         /// </para>
         /// </remarks>
-        protected void FixVolatileData(FixFlags flags)
+        protected virtual void FixVolatileData(FixFlags flags)
         {
             object forceCreation = null;
 
@@ -1641,7 +1642,7 @@
         /// <summary>
         /// The application supplied message of logging event.
         /// </summary>
-        private readonly object m_message;
+        private object m_message;
 
         /// <summary>
         /// The exception that was thrown.
diff --git a/src/log4net/Util/SystemStringFormat.cs b/src/log4net/Util/SystemStringFormat.cs
index cd71c03..f28f077 100644
--- a/src/log4net/Util/SystemStringFormat.cs
+++ b/src/log4net/Util/SystemStringFormat.cs
@@ -36,8 +36,16 @@
 	public sealed class SystemStringFormat
 	{
 		private readonly IFormatProvider m_provider;
-		private readonly string m_format;
-		private readonly object[] m_args;
+
+		/// <summary>
+		/// Format
+		/// </summary>
+		public string Format { get; set; }
+
+		/// <summary>
+		/// Args
+		/// </summary>
+		public object[] Args { get; set; }
 
 		#region Constructor
 
@@ -50,8 +58,8 @@
 		public SystemStringFormat(IFormatProvider provider, string format, params object[] args)
 		{
 			m_provider = provider;
-			m_format = format;
-			m_args = args;
+			Format = format;
+			Args = args;
 		}
 
 		#endregion Constructor
@@ -62,7 +70,7 @@
 		/// <returns>the formatted string</returns>
 		public override string ToString()
 		{
-			return StringFormat(m_provider, m_format, m_args);
+			return StringFormat(m_provider, Format, Args);
 		}
 
 		#region StringFormat