File: Ats\LoggingExports.cs
Web Access
Project: src\src\Aspire.Hosting\Aspire.Hosting.csproj (Aspire.Hosting)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Aspire.Hosting.ApplicationModel;
using Microsoft.Extensions.Logging;
 
namespace Aspire.Hosting.Ats;
 
/// <summary>
/// ATS exports for logging operations.
/// </summary>
internal static class LoggingExports
{
    /// <summary>
    /// Gets a logger for a resource.
    /// </summary>
    [AspireExport("getLogger", Description = "Gets a logger for a resource")]
    public static ILogger GetLogger(ResourceLoggerService loggerService, IResourceBuilder<IResource> resource)
    {
        return loggerService.GetLogger(resource.Resource);
    }
 
    /// <summary>
    /// Gets a logger by resource name.
    /// </summary>
    [AspireExport("getLoggerByName", Description = "Gets a logger by resource name")]
    public static ILogger GetLoggerByName(ResourceLoggerService loggerService, string resourceName)
    {
        return loggerService.GetLogger(resourceName);
    }
 
    /// <summary>
    /// Logs an information message.
    /// </summary>
    [AspireExport("logInformation", Description = "Logs an information message")]
    public static void LogInformation(this ILogger logger, string message)
    {
        logger.LogInformation("{Message}", message);
    }
 
    /// <summary>
    /// Logs a warning message.
    /// </summary>
    [AspireExport("logWarning", Description = "Logs a warning message")]
    public static void LogWarning(this ILogger logger, string message)
    {
        logger.LogWarning("{Message}", message);
    }
 
    /// <summary>
    /// Logs an error message.
    /// </summary>
    [AspireExport("logError", Description = "Logs an error message")]
    public static void LogError(this ILogger logger, string message)
    {
        logger.LogError("{Message}", message);
    }
 
    /// <summary>
    /// Logs a debug message.
    /// </summary>
    [AspireExport("logDebug", Description = "Logs a debug message")]
    public static void LogDebug(this ILogger logger, string message)
    {
        logger.LogDebug("{Message}", message);
    }
 
    /// <summary>
    /// Logs a message with a specified log level.
    /// </summary>
    [AspireExport("log", Description = "Logs a message with specified level")]
    public static void Log(this ILogger logger, string level, string message)
    {
        var logLevel = level.ToLowerInvariant() switch
        {
            "trace" => LogLevel.Trace,
            "debug" => LogLevel.Debug,
            "information" or "info" => LogLevel.Information,
            "warning" or "warn" => LogLevel.Warning,
            "error" => LogLevel.Error,
            "critical" => LogLevel.Critical,
            _ => LogLevel.Information
        };
 
        logger.Log(logLevel, "{Message}", message);
    }
 
    /// <summary>
    /// Completes the log stream for a resource.
    /// </summary>
    [AspireExport("completeLog", Description = "Completes the log stream for a resource")]
    public static void CompleteLog(ResourceLoggerService loggerService, IResourceBuilder<IResource> resource)
    {
        loggerService.Complete(resource.Resource);
    }
 
    /// <summary>
    /// Completes the log stream by resource name.
    /// </summary>
    [AspireExport("completeLogByName", Description = "Completes the log stream by resource name")]
    public static void CompleteLogByName(ResourceLoggerService loggerService, string resourceName)
    {
        loggerService.Complete(resourceName);
    }
}