Public/Set-P1LogLevel.ps1

function Set-P1LogLevel {
    <#
    .Synopsis
    Set the log level of PlannerOne

    .Description
    Set the log level of PlannerOne service and PlannerOne Web.
    Standard level are Info and Debug.
    PlannerOne Web and Service must be restarted to take the new option into account.
    PlannerOne Web and Service will be restarted if option -Restart is set.
    Configuration is persisted and reapplied after a switch version.
    Use -NoPersist to change only the current installed version.
    The default value is Info.
    The following levels are defined in order of increasing priority:
    - ALL
    - DEBUG
    - INFO
    - WARN
    - ERROR
    - FATAL
    - OFF
    Current log level can be obtain with Get-P1LogLevel.

    .Parameter Tenant
    The target tenant.

    .Parameter Level
    The log level to set.

    .Parameter Restart
    Restart the PlannerOne Web Application and the PlannerOne Service after the new log level has been set.

    .Parameter NoPersist
    Do not persist the configuration for next upgrade.

    .Example
    # Set the tenant PROD to Debug and restart
    Set-P1LogLevel -Tenant PROD -Level DEBUG -Restart
#>

    [cmdletbinding()]
    param(
        [Parameter(Mandatory=$true)]
        [string] $Tenant,
        [Parameter(Mandatory=$true)]
        [string] $Level,
        [switch] $Restart,
        [switch] $NoPersist
    )
    Process
    {
        Write-Section "Setting log level to $Level for tenant $Tenant"
        if (!(Test-Tenant $Tenant)) {
            Write-Warning "Tenant $Tenant does not exist."
            Write-Warning "Operation canceled."
            return;
        }

        $levelOK = Test-LogLevel $Level
        if (!$levelOK) {
            Write-Warning "Log level is not correct."
            Write-LogLevels
            Write-Warning "Operation canceled."
            return
        }

        $info = Get-P1Tenant $Tenant
        $webApp = Get-P1WebApplication $Tenant
        if ($webApp -eq $null) {
                Write-KO "Cannot find the web application for tenant $Tenant"
                return
        }

        $webPath = $webApp.PhysicalPath
        Write-Verbose "Web physical path is $webPath"
        Write-Log4NetWeb $webPath $Level
        $servicePath = $info.Path
        Write-Verbose "Service physical path is $servicePath"
        Write-Log4NetService $servicePath $Level

        if (!$NoPersist) {
            Write-LogLevel $Tenant $Level
        }

        if ($Restart) {
            Restart-Tenant $webApp $info
        }

        Write-OK "Log level set to $Level for tenant $Tenant"
    }
}