| File: BuildCheck\Infrastructure\CheckContext\CheckLoggingContext.cs | Web Access |
| Project: src\msbuild\src\Build\Microsoft.Build.csproj (Microsoft.Build) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections.Generic; using Microsoft.Build.BackEnd.Logging; using Microsoft.Build.Framework; using Microsoft.Build.Framework.Telemetry; using Microsoft.Build.Shared; namespace Microsoft.Build.Experimental.BuildCheck; /// <summary> /// <see cref="ICheckContext"/> that uses <see cref="ILoggingService"/> to dispatch. /// </summary> /// <remarks> /// Making this a record struct to avoid allocations (unless called through interface - which leads to boxing). /// This is wanted since this can be used in a hot path (of property reads and writes) /// </remarks> internal readonly struct CheckLoggingContext(ILoggingService loggingService, BuildEventContext eventContext) : ICheckContext { public BuildEventContext BuildEventContext => eventContext; public void DispatchBuildEvent(BuildEventArgs buildEvent) => loggingService .LogBuildEvent(buildEvent); public void DispatchAsComment(MessageImportance importance, string messageResourceName, params object?[] messageArgs) => loggingService .LogComment(eventContext, importance, messageResourceName, messageArgs); public void DispatchAsCommentFromText(MessageImportance importance, string message) => loggingService .LogCommentFromText(eventContext, importance, message); public void DispatchAsErrorFromText(string? subcategoryResourceName, string? errorCode, string? helpKeyword, BuildEventFileInfo file, string message) => loggingService .LogErrorFromText(eventContext, subcategoryResourceName, errorCode, helpKeyword, file, message); public void DispatchAsWarningFromText(string? subcategoryResourceName, string? errorCode, string? helpKeyword, BuildEventFileInfo file, string message) => loggingService .LogWarningFromText(eventContext, subcategoryResourceName, errorCode, helpKeyword, file, message); public void DispatchFailedAcquisitionTelemetry(string assemblyName, Exception exception) { var telemetryTransportData = KnownTelemetry.BuildCheckTelemetry.ProcessCustomCheckLoadingFailure(assemblyName, exception); loggingService.LogTelemetry(eventContext, telemetryTransportData.Item1, telemetryTransportData.Item2); } public void DispatchTelemetry(BuildCheckTracingData data) { foreach ((string, IDictionary<string, string>) telemetryTransportData in KnownTelemetry.BuildCheckTelemetry.ProcessBuildCheckTracingData(data)) { loggingService.LogTelemetry(eventContext, telemetryTransportData.Item1, telemetryTransportData.Item2); } } }