Prevented any logging activity when no logging target is specified rather than synchr...
authorcrazyjncsu <jake.morgan@elsitech.com>
Fri, 25 May 2012 15:15:26 +0000 (11:15 -0400)
committercrazyjncsu <jake.morgan@elsitech.com>
Fri, 25 May 2012 15:15:26 +0000 (11:15 -0400)
mcs/class/System.ServiceModel/System.ServiceModel/Logger.cs

index 3f055c77ed0a484dc66fa1078cb24d2eb2e8d99d..d1679e5c0c904ba5c59c9ecf8501634a3663cd70 100644 (file)
@@ -71,7 +71,7 @@ namespace System.ServiceModel
                const string xmlns = "http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace";
                static MessageLoggingSettings settings = new MessageLoggingSettings ();
                static int event_id;
-               static TextWriter log_writer = TextWriter.Null;
+               static TextWriter log_writer;
                static XmlWriter xml_writer;
 #if !NET_2_1
                static readonly TraceSource source = new TraceSource ("System.ServiceModel");
@@ -102,7 +102,9 @@ namespace System.ServiceModel
                                break;
 #endif
                        }
-                       xml_writer = XmlWriter.Create (log_writer, new XmlWriterSettings () { OmitXmlDeclaration = true });
+
+                       if (log_writer != null)
+                               xml_writer = XmlWriter.Create (log_writer, new XmlWriterSettings () { OmitXmlDeclaration = true });
 
 #if !NET_2_1
                        message_source.Switch.Level = SourceLevels.Information;
@@ -140,19 +142,21 @@ namespace System.ServiceModel
 
                static void Log (TraceEventType eventType, string message, params object [] args)
                {
-                       lock (log_writer){
-                               event_id++;
+                       if (log_writer){
+                               lock (log_writer){
+                                       event_id++;
 #if NET_2_1
-                               log_writer.Write ("[{0}] ", event_id);
+                                       log_writer.Write ("[{0}] ", event_id);
 #endif
-                               TraceCore (TraceEventType.Information, event_id,
-                                       false, Guid.Empty, // FIXME
-                                       message, args);
-                               log_writer.WriteLine (message, args);
-                               log_writer.Flush ();
+                                       TraceCore (TraceEventType.Information, event_id,
+                                               false, Guid.Empty, // FIXME
+                                               message, args);
+                                       log_writer.WriteLine (message, args);
+                                       log_writer.Flush ();
 #if !NET_2_1
-                               source.TraceEvent (eventType, event_id, message, args);
+                                       source.TraceEvent (eventType, event_id, message, args);
 #endif
+                               }
                        }
                }
                
@@ -164,46 +168,50 @@ namespace System.ServiceModel
                
                public static void LogMessage (MessageLogSourceKind sourceKind, ref Message msg, long maxMessageSize)
                {
-                       if (maxMessageSize > int.MaxValue)
-                               throw new ArgumentOutOfRangeException ("maxMessageSize");
-                       var mb = msg.CreateBufferedCopy ((int) maxMessageSize);
-                       msg = mb.CreateMessage ();
-                       LogMessage (new MessageLogTraceRecord (sourceKind, msg.GetType (), mb));
+                       if (log_writer){
+                               if (maxMessageSize > int.MaxValue)
+                                       throw new ArgumentOutOfRangeException ("maxMessageSize");
+                               var mb = msg.CreateBufferedCopy ((int) maxMessageSize);
+                               msg = mb.CreateMessage ();
+                               LogMessage (new MessageLogTraceRecord (sourceKind, msg.GetType (), mb));
+                       }
                }
                
                public static void LogMessage (MessageLogTraceRecord log)
                {
-                       var sw = new StringWriter ();
+                       if (log_writer){
+                               var sw = new StringWriter ();
 #if NET_2_1
-                       var xw = XmlWriter.Create (sw, xws);
+                               var xw = XmlWriter.Create (sw, xws);
 #else
-                       var doc = new XmlDocument ();
-                       var xw = doc.CreateNavigator ().AppendChild ();
+                               var doc = new XmlDocument ();
+                               var xw = doc.CreateNavigator ().AppendChild ();
 #endif
-                       xw.WriteStartElement ("MessageLogTraceRecord", xmlns);
-                       xw.WriteStartAttribute ("Time");
-                       xw.WriteValue (log.Time);
-                       xw.WriteEndAttribute ();
-                       xw.WriteAttributeString ("Source", log.Source.ToString ());
-                       xw.WriteAttributeString ("Type", log.Type.FullName);
-                       var msg = log.Message.CreateMessage ();
-                       if (!msg.IsEmpty)
-                               msg.WriteMessage (xw);
-                       xw.WriteEndElement ();
-                       xw.Close ();
+                               xw.WriteStartElement ("MessageLogTraceRecord", xmlns);
+                               xw.WriteStartAttribute ("Time");
+                               xw.WriteValue (log.Time);
+                               xw.WriteEndAttribute ();
+                               xw.WriteAttributeString ("Source", log.Source.ToString ());
+                               xw.WriteAttributeString ("Type", log.Type.FullName);
+                               var msg = log.Message.CreateMessage ();
+                               if (!msg.IsEmpty)
+                                       msg.WriteMessage (xw);
+                               xw.WriteEndElement ();
+                               xw.Close ();
 
-                       event_id++;
-                       lock (log_writer){
+                               event_id++;
+                               lock (log_writer){
 #if NET_2_1
-                               log_writer.Write ("[{0}] ", event_id);
+                                       log_writer.Write ("[{0}] ", event_id);
 
-                               TraceCore (TraceEventType.Information, event_id, /*FIXME*/false, /*FIXME*/Guid.Empty, sw);
+                                       TraceCore (TraceEventType.Information, event_id, /*FIXME*/false, /*FIXME*/Guid.Empty, sw);
 #else
-                               TraceCore (TraceEventType.Information, event_id, /*FIXME*/false, /*FIXME*/Guid.Empty, doc.CreateNavigator ());
+                                       TraceCore (TraceEventType.Information, event_id, /*FIXME*/false, /*FIXME*/Guid.Empty, doc.CreateNavigator ());
 
-                               message_source.TraceData (TraceEventType.Information, event_id, doc.CreateNavigator ());
+                                       message_source.TraceData (TraceEventType.Information, event_id, doc.CreateNavigator ());
 #endif
-                               log_writer.Flush ();
+                                       log_writer.Flush ();
+                               }
                        }
                }