PowerShell日志函数合并咨询:新手对变量及逻辑的疑问
原日志函数逻辑解析
关于$msg变量的说明
每个函数里的$msg是函数的参数,调用函数时需要传入具体内容(比如LogSuccess "文件复制完成"),所以不需要在脚本其他位置提前声明,它的值由调用时的输入决定。
四个函数的共性与差异
四个函数核心逻辑完全一致,仅在三个细节上有区别:
- 控制台输出的前缀(
SUCCESS:/ERROR:/WARNING:/无) - 控制台输出的文字颜色
- 写入日志文件时的前缀(
Logging函数无前缀)
合并后的通用日志函数
通过新增Level参数区分日志类型,抽离重复逻辑,实现一个通用函数:
Function global:Write-Log { [CmdletBinding()] Param( [Parameter(Mandatory=$true)] [string]$Message, [ValidateSet("Success", "Error", "Warning", "Info")] [string]$Level = "Info" ) # 集中定义各日志级别的配置:前缀、颜色、日志前缀 $levelConfig = @{ Success = @{ Prefix = "SUCCESS: "; Color = "Green"; LogPrefix = "SUCCESS: " } Error = @{ Prefix = "ERROR: "; Color = "Red"; LogPrefix = "ERROR: " } Warning = @{ Prefix = "WARNING: "; Color = "Yellow"; LogPrefix = "WARNING: " } Info = @{ Prefix = ""; Color = "Cyan"; LogPrefix = "" } } $config = $levelConfig[$Level] # 控制台输出内容 Write-Host "$($config.Prefix)$Message" -ForegroundColor $config.Color # 生成带时间戳的日志内容 $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" $logContent = "$timestamp: $Message" # 开启日志模式时写入文件 if ($global:loggingmode) { Write-Output "$($config.LogPrefix)$logContent" | Out-File -FilePath $global:logfile -Append } }
使用示例
- 成功日志:
Write-Log -Message "数据库备份完成" -Level Success - 错误日志:
Write-Log -Message "连接数据库失败" -Level Error - 警告日志:
Write-Log -Message "磁盘剩余空间不足" -Level Warning - 普通信息:
Write-Log -Message "开始执行备份任务"(默认使用Info级别)
合并优势
- 消除代码冗余,后续修改日志格式、写入逻辑只需维护一处
- 通过
ValidateSet限制日志级别输入,避免拼写错误 - 配置集中管理,新增日志级别只需在
$levelConfig中添加对应条目
内容的提问来源于stack exchange,提问作者DanielH
相关产品推荐
相关产品推荐

