Public/Logging/core/Close-KrLogger.ps1

<#
    .SYNOPSIS
        Closes the logger and flushes all logs.
    .DESCRIPTION
        Closes the logger and flushes all logs. If no logger is specified, it will close the default logger.
    .PARAMETER Logger
        Instance of Serilog.Logger to close. If not specified, the default logger will be closed.
    .PARAMETER LoggerName
        Name of the logger to close. If specified, the logger with this name will be closed
    .PARAMETER DefaultLogger
        If specified, closes the default logger.
    .INPUTS
        Instance of Serilog.Logger
    .OUTPUTS
        None. This cmdlet does not return any output.
    .EXAMPLE
        PS> Close-KrLogger -Logger $myLogger
        Closes the specified logger and flushes all logs.
    .EXAMPLE
        PS> Close-KrLogger
        Closes all active loggers and flushes any remaining logs.
    .EXAMPLE
        PS> Close-KrLogger -LoggerName 'MyLogger'
        Closes the logger with the specified name and any remaining logs.
    .EXAMPLE
        PS> Close-KrLogger -DefaultLogger
        Closes the default logger and flushes any remaining logs.
#>

function Close-KrLogger {
    [KestrunRuntimeApi('Everywhere')]
    [CmdletBinding(DefaultParameterSetName = 'AllLogs')]
    param(
        [Parameter(Mandatory = $false, ValueFromPipeline = $true, ParameterSetName = 'Logger')]
        [Serilog.ILogger]$Logger,

        [Parameter(Mandatory = $false, ParameterSetName = 'LoggerName')]
        [string]$LoggerName,

        [Parameter(Mandatory = $false, ParameterSetName = 'Default')]
        [switch]$DefaultLogger
    )

    process {
        if ($DefaultLogger) {
            $Logger = [Kestrun.Logging.LoggerManager]::GetDefault()
        } elseif ($Null -eq $Logger) {
            if (-not [string]::IsNullOrEmpty($LoggerName)) {
                # If LoggerName is specified, get the logger with that name
                $Logger = [Kestrun.Logging.LoggerManager]::Get($LoggerName)
            }
        }
        if ($null -ne $Logger) {
            # Close the specified logger
            $null = [Kestrun.Logging.LoggerManager]::CloseAndFlush($Logger)
        } else {
            # Close all loggers
            [Kestrun.Logging.LoggerManager]::Clear()
        }
    }
}