handlers/file.psm1
$DEFAULT_LOG_FOLDER = "$($env:SystemRoot)\Logs" function New-uLogFile { param( [string] $Name, [string] $Source = $MyInvocation.ScriptName, [string] $Formatter = [LogFormatter]::FileDefault, [LogLevel] $Level = [LogLevel]::SUCCESS, [string] $Path = '', [switch] $Append, [Switch] $Enabled = $true ) Begin{ if ($Path -eq ''){ if ($Source -eq ''){ $Source = 'Console' $Path = "$DEFAULT_LOG_FOLDER\PowerShellConsole.log" }else{ $Path = "$DEFAULT_LOG_FOLDER\$((Get-Item $Source).Name).log" } } } Process{ try{ 'test' | Out-File -LiteralPath $Path -ErrorAction Stop Remove-Item $Path -Force }catch{ try{ $Path = "$([System.Environment]::CurrentDirectory)\$((Get-Item $Source).Name).log" 'test' | Out-File -LiteralPath $Path -ErrorAction Stop Remove-Item $Path -Force }catch{ $Path = "$($env:TEMP)\$((Get-Item $Source).Name).log" } } try{ Write-Host "log path : '$Path'" }catch{} $log = [PSCustomObject] @{Name = $Name; Enabled = $Enabled; Type = 'file'; Formatter = $Formatter; Level = $Level; Source = $Source; Path = $Path } $log | Add-Member -MemberType ScriptMethod -Name WriteLog -Value { param($Record) if (-not $this.Enabled){return} if ($this.Formatter -notmatch '-'){$this.Formatter = 'Format-' + $this.Formatter} $FormattedMessage = & $this.Formatter -Record $Record if ($Record.Level -ge $this.Level){ $FormattedMessage | Out-File -LiteralPath $this.Path -Encoding unicode -Append } } $log } } |