Public/Log/Set-LogConfiguration.ps1
Function Set-LogConfiguration { <# .SYNOPSIS Sets global logging configuation (used by Write-Log). .DESCRIPTION It sets $LogConfiguration object which describes logging configuration (see LogConfiguration.ps1). .EXAMPLE Set-LogConfiguration -LogLevel 'Warn' -LogFile "$PSScriptRoot\test.log" #> [CmdletBinding()] [OutputType([void])] param( # Logging level threshold. Only messages with this level or above will be logged (default: Info). [Parameter(Mandatory=$false)] [string] [ValidateSet('', 'Debug', 'Info', 'Warn', 'Error')] $LogLevel, # Path to additional file log or $null if shouldn't log to file (default: $null). [Parameter(Mandatory=$false)] [string] $LogFile, # Name of Event Log Source to log to or $null if shouldn't log to Event Log (default: $null). [Parameter(Mandatory=$false)] [switch] $LogEventLogSource, # Logging level threshold for Event Log. This would normally have higher threshold than LogLevel (default: Error). [Parameter(Mandatory=$false)] [switch] [ValidateSet('', 'Debug', 'Info', 'Warn', 'Error')] $LogEventLogThreshold ) Begin { if (!(Get-Variable -Scope Script -Name LogConfiguration -ErrorAction SilentlyContinue)) { $Script:LogConfiguration = [PSCustomObject]@{ LogLevel = 'Info'; LogFile = $null; LogEventLogSource = $null; LogEventLogThreshold = 'Error'; } } if ($LogFile -and (![System.IO.Path]::IsPathRooted($LogFile))) { # we need to set absolute path to log file as .NET working directory would be c:\windows\system32 $LogFile = Join-Path -Path ((Get-Location).ProviderPath) -ChildPath $LogFile } } Process { $newLogConfiguration = $Script:LogConfiguration foreach ($param in $PSBoundParameters.GetEnumerator()) { if ($param.Key -eq 'LogLevel' -and !($param.Value)) { $paramValue = 'Info' } elseif ($param.Key -eq 'LogEventLogThreshold' -and !($param.Value)) { $paramValue = 'Error' } elseif ($param.Key -eq 'Verbose') { continue } else { $paramValue = $param.Value } $newLogConfiguration.$($param.Key) = $paramValue } if ($PSBoundParameters['Verbose']) { $logMsg = "Logging messages with level >= $($newLogConfiguration.LogLevel) to stdout" if ($newLogConfiguration.LogFile) { $logMsg += " and file '$($newLogConfiguration.LogFile)'" } if ($newLogConfiguration.LogEventLogSource) { $logMsg += ", also logging messages with level >= $($newLogConfiguration.LogEventLogThreshold) to event log source '$($newLogConfiguration.LogEventLogSource)'" } $logMsg += '.' Write-Verbose -Message $logMsg } $Script:LogConfiguration = $newLogConfiguration } End { } } |