File: Errors\PackagingLogMessage.cs
Web Access
Project: src\src\nuget-client\src\NuGet.Core\NuGet.Common\NuGet.Common.csproj (NuGet.Common)
// 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 NuGet.Frameworks;

namespace NuGet.Common
{
    public class PackagingLogMessage : IPackLogMessage
    {
        public LogLevel Level { get; set; }
        public NuGetLogCode Code { get; set; }
        public string Message { get; set; }
        public DateTimeOffset Time { get; set; }
        public string? ProjectPath { get; set; }
        public WarningLevel WarningLevel { get; set; } = WarningLevel.Severe; //setting default to Severe as 0 implies show no warnings
        public string? FilePath { get; set; }
        public int StartLineNumber { get; set; }
        public int StartColumnNumber { get; set; }
        public int EndLineNumber { get; set; }
        public int EndColumnNumber { get; set; }
        public string? LibraryId { get; set; }
        public NuGetFramework? Framework { get; set; }

        /// <summary>
        /// Initializes a new instance of the PackLogMessage class
        /// </summary>
        /// <param name="logLevel">The log level</param>
        /// <param name="logCode">The NuGet log code</param>
        /// <param name="message">The log message</param>
        private PackagingLogMessage(LogLevel logLevel, NuGetLogCode logCode, string message)
            : this(logLevel: logLevel, logCode: logCode, message: message, libraryId: null, framework: null) { }

        /// <summary>
        /// Initializes a new instance of the PackLogMessage class
        /// </summary>
        /// <param name="logLevel">The log level</param>
        /// <param name="logCode">The NuGet log code</param>
        /// <param name="message">The log message</param>
        /// <param name="libraryId">The package Id</param>
        /// <param name="framework">The NuGet framework</param>
        private PackagingLogMessage(LogLevel logLevel, NuGetLogCode logCode, string message, string? libraryId, NuGetFramework? framework)
        {
            Level = logLevel;
            Code = logCode;
            Message = message;
            LibraryId = libraryId;
            Framework = framework;
            Time = DateTimeOffset.UtcNow;
        }

        private PackagingLogMessage(LogLevel logLevel, string message)
            : this(logLevel, NuGetLogCode.Undefined, message) { }

        /// <summary>
        /// Create an error log message.
        /// </summary>
        /// <param name="code">The logging code</param>
        /// <param name="message">The log message</param>
        public static PackagingLogMessage CreateError(string message, NuGetLogCode code)
        {
            return new PackagingLogMessage(LogLevel.Error, code, message);
        }

        public static PackagingLogMessage CreateWarning(string message, NuGetLogCode code)
        {
            return new PackagingLogMessage(LogLevel.Warning, code, message);
        }

        public static PackagingLogMessage CreateMessage(string message, LogLevel logLevel)
        {
            return new PackagingLogMessage(logLevel, message);
        }

        public static PackagingLogMessage CreateWarning(string message, NuGetLogCode code, string? libraryId, NuGetFramework? framework)
        {
            return new PackagingLogMessage(logLevel: LogLevel.Warning, logCode: code, message: message, libraryId: libraryId, framework: framework);
        }
    }
}