| File: src\runtime\src\libraries\Common\src\System\Composition\Diagnostics\DebuggerTraceWriter.cs | Web Access |
| Project: src\runtime\src\libraries\System.ComponentModel.Composition\src\System.ComponentModel.Composition.csproj (System.ComponentModel.Composition) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; using System.Globalization; using System.Text; namespace System.Composition.Diagnostics { internal sealed class DebuggerTraceWriter : TraceWriter { private static readonly string s_sourceName = typeof(DebuggerTraceWriter).Assembly.GetName().Name!; 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); } private static string CreateLogMessage(TraceEventType eventType, CompositionTraceId traceId, string format, params object[] arguments) { StringBuilder messageBuilder = new StringBuilder(); // Format taken from TraceListener.TraceEvent in .NET Framework messageBuilder.Append($"{s_sourceName} {eventType}: {(int)traceId} : "); if (arguments == null) { messageBuilder.Append(format); } else { messageBuilder.AppendFormat(CultureInfo.InvariantCulture, format, arguments); } messageBuilder.AppendLine(); return messageBuilder.ToString(); } public enum TraceEventType { Error = 2, Warning = 4, Information = 8, } } }