| File: NuGetSdkLogger.cs | Web Access |
| Project: src\nuget-client\src\NuGet.Core\Microsoft.Build.NuGetSdkResolver\Microsoft.Build.NuGetSdkResolver.csproj (Microsoft.Build.NuGetSdkResolver) |
// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Build.Framework; using NuGet.Common; using ILogger = NuGet.Common.ILogger; namespace Microsoft.Build.NuGetSdkResolver { /// <summary> /// An implementation of <see cref="ILogger" /> that logs messages to an <see cref="SdkLogger" />. /// </summary> /// <inheritdoc /> internal sealed class NuGetSdkLogger : ILogger { /// <summary> /// A collection of errors that have been logged. /// </summary> private readonly List<string> _errors = new List<string>(); /// <summary> /// A <see cref="SdkLogger"/> to forward events to. /// </summary> private readonly SdkLogger _sdkLogger; /// <summary> /// A collection of warnings that have been logged. /// </summary> private readonly List<string> _warnings = new List<string>(); /// <summary> /// Initializes a new instance of the NuGetLogger class. /// </summary> /// <param name="sdkLogger">A <see cref="SdkLogger"/> to forward events to.</param> /// <exception cref="ArgumentNullException"><paramref name="sdkLogger" /> is <see langword="null" />.</exception> public NuGetSdkLogger(SdkLogger sdkLogger) { _sdkLogger = sdkLogger ?? throw new ArgumentNullException(nameof(sdkLogger)); } /// <summary> /// Gets a <see cref="IReadOnlyCollection{T}" /> of error messages that have been logged. /// </summary> public IReadOnlyCollection<string> Errors => _errors; /// <summary> /// Gets a <see cref="IReadOnlyCollection{T}" /> of warning messages that have been logged. /// </summary> public IReadOnlyCollection<string> Warnings => _warnings; /// <inheritdoc cref="ILogger.Log(NuGet.Common.LogLevel, string)" /> public void Log(LogLevel level, string data) { switch (level) { case LogLevel.Debug: case LogLevel.Verbose: // Debug and Verbose verbosity in NuGet maps to a low importance message in MSBuild _sdkLogger.LogMessage(data, MessageImportance.Low); break; case LogLevel.Information: // Information verbosity in NuGet maps to a normal importance message in MSBuild _sdkLogger.LogMessage(data, MessageImportance.Normal); break; case LogLevel.Minimal: // Minimal verbosity in NuGet maps to a high importance message in MSBuild _sdkLogger.LogMessage(data, MessageImportance.High); break; case LogLevel.Warning: _warnings.Add(data); break; case LogLevel.Error: _errors.Add(data); break; } if (SdkResolverEventSource.Instance.IsEnabled()) { switch (level) { case LogLevel.Debug: case LogLevel.Verbose: SdkResolverEventSource.Instance.LogMessageVerbose((int)level, data); break; case LogLevel.Information: SdkResolverEventSource.Instance.LogMessageInformational((int)level, data); break; case LogLevel.Minimal: SdkResolverEventSource.Instance.LogMessageAlways((int)level, data); break; case LogLevel.Warning: SdkResolverEventSource.Instance.LogMessageWarning((int)level, data); break; case LogLevel.Error: SdkResolverEventSource.Instance.LogMessageError((int)level, data); break; } } } /// <inheritdoc cref="ILogger.LogAsync(ILogMessage)" /> public void Log(ILogMessage message) => Log(message.Level, message.Message); /// <inheritdoc cref="ILogger.LogAsync(NuGet.Common.LogLevel, string)" /> public Task LogAsync(LogLevel level, string data) { Log(level, data); return Task.CompletedTask; } /// <inheritdoc cref="ILogger.LogAsync(ILogMessage)" /> public Task LogAsync(ILogMessage message) { Log(message); return Task.CompletedTask; } /// <inheritdoc cref="ILogger.LogDebug(string)" /> public void LogDebug(string data) => Log(LogLevel.Debug, data); /// <inheritdoc cref="ILogger.LogError(string)" /> public void LogError(string data) => Log(LogLevel.Error, data); /// <inheritdoc cref="ILogger.LogInformation(string)" /> public void LogInformation(string data) => Log(LogLevel.Information, data); /// <inheritdoc cref="ILogger.LogInformationSummary(string)" /> public void LogInformationSummary(string data) => Log(LogLevel.Information, data); /// <inheritdoc cref="ILogger.LogMinimal(string)" /> public void LogMinimal(string data) => Log(LogLevel.Minimal, data); /// <inheritdoc cref="ILogger.LogVerbose(string)" /> public void LogVerbose(string data) => Log(LogLevel.Verbose, data); /// <inheritdoc cref="ILogger.LogWarning(string)" /> public void LogWarning(string data) => Log(LogLevel.Warning, data); } }