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");
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;
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
+ }
}
}
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 ();
+ }
}
}