File: Installers\NuGet\NuGetLogger.cs
Web Access
Project: src\src\sdk\src\TemplateEngine\Microsoft.TemplateEngine.Edge\Microsoft.TemplateEngine.Edge.csproj (Microsoft.TemplateEngine.Edge)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using Microsoft.Extensions.Logging;
using NuGet.Common;
using INuGetLogger = global::NuGet.Common.ILogger;
using NuGetLogLevel = global::NuGet.Common.LogLevel;

namespace Microsoft.TemplateEngine.Edge.Installers.NuGet
{
    /// <summary>
    /// Default logger to be used with NuGet API. It forwards all the messages to different methods of ITemplateEngineHost depending on the log level.
    /// </summary>
    internal class NuGetLogger : INuGetLogger
    {
        private readonly Microsoft.Extensions.Logging.ILogger _baseLogger;

        internal NuGetLogger(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory)
        {
            _baseLogger = loggerFactory.CreateLogger("NuGetLogger") ?? throw new System.ArgumentNullException(nameof(loggerFactory));
        }

        public void Log(NuGetLogLevel level, string data)
        {
            switch (level)
            {
                case NuGetLogLevel.Debug: LogDebug(data); break;
                case NuGetLogLevel.Error: LogError(data); break;
                case NuGetLogLevel.Information: LogInformation(data); break;
                case NuGetLogLevel.Minimal: LogMinimal(data); break;
                case NuGetLogLevel.Verbose: LogVerbose(data); break;
                case NuGetLogLevel.Warning: LogWarning(data); break;
            }
        }

        public void Log(ILogMessage message)
        {
            Log(message.Level, message.Message);
        }

        public Task LogAsync(NuGetLogLevel level, string data)
        {
            Log(level, data);
            return Task.FromResult(0);
        }

        public Task LogAsync(ILogMessage message)
        {
            Log(message);
            return Task.FromResult(0);
        }

        public void LogDebug(string data)
        {
            _baseLogger.LogDebug(data);
        }

        public void LogError(string data)
        {
            _baseLogger.LogError(data);
        }

        public void LogInformation(string data)
        {
            //TODO: NuGet is putting too much logs to info level, check if we want this data
            _baseLogger.LogDebug(data);
        }

        public void LogInformationSummary(string data)
        {
            _baseLogger.LogInformation(data);
        }

        public void LogMinimal(string data)
        {
            _baseLogger.LogInformation(data);
        }

        public void LogVerbose(string data)
        {
            _baseLogger.LogDebug(data);
        }

        public void LogWarning(string data)
        {
            _baseLogger.LogWarning(data);
        }
    }
}