// -----------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// -----------------------------------------------------------------------
#if SILVERLIGHT
using System;
using System.Diagnostics;
using System.Globalization;
using System.Text;
namespace System.ComponentModel.Composition.Diagnostics{
internal sealed class SilverlightTraceWriter : TraceWriter
{
private static readonly string SourceName = "System.ComponentModel.Composition";
public override bool CanWriteInformation
{
get { return false; }
}
public override bool CanWriteWarning
{
get { return Debugger.IsLogging(); }
}
public override bool CanWriteError
{
get { return Debugger.IsLogging(); }
}
public override void WriteInformation(CompositionTraceId traceId, string format, params object[] arguments)
{
WriteEvent(TraceEventType.Information, traceId, format, arguments);
}
public override void WriteWarning(CompositionTraceId traceId, string format, params object[] arguments)
{
WriteEvent(TraceEventType.Warning, traceId, format, arguments);
}
public override void WriteError(CompositionTraceId traceId, string format, params object[] arguments)
{
WriteEvent(TraceEventType.Error, traceId, format, arguments);
}
private static void WriteEvent(TraceEventType eventType, CompositionTraceId traceId, string format, params object[] arguments)
{
if (!Debugger.IsLogging())
{
return;
}
string logMessage = CreateLogMessage(eventType, traceId, format, arguments);
Debugger.Log(0, null, logMessage);
}
internal static string CreateLogMessage(TraceEventType eventType, CompositionTraceId traceId, string format, params object[] arguments)
{
StringBuilder messageBuilder = new StringBuilder();
// Format taken from TraceListener.TraceEvent in full framework
messageBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0} {1}: {2} : ",
SourceName, eventType.ToString(), (int)traceId);
if (arguments == null)
{
messageBuilder.Append(format);
}
else
{
messageBuilder.AppendFormat(CultureInfo.InvariantCulture, format, arguments);
}
messageBuilder.AppendLine();
return messageBuilder.ToString();
}
// Copied from TraceEventType in full framework
internal enum TraceEventType
{
Error = 2,
Warning = 4,
Information = 8,
}
}
}
#endif
|