<#
.SYNOPSIS
メッセージをログファイルに出力します。
.DESCRIPTION
文字列の配列を指定して、ログファイルに時刻とメッセージを出力します。
.EXAMPLE
Write-Log "ログ出力!!" "test.log"
[test.log]
2019/07/18 09:03:22.6429 ログ出力!!
.EXAMPLE
"ログ出力!!!" | log -Keep 7
.INPUTS
1. 出力するメッセージ (必須)
2. ファイル情報 (任意)
3. 保持日数 (任意)
.OUTPUTS
ログファイル(yyyyMMdd.log)
.NOTES
- ログに出力されるメッセージは、コンソールにも表示されます。
- 配列を指定した場合、同時刻で出力されます。
- ファイルを指定しない場合は、日付名のログファイルに出力されます。
- KeepDays に値を設定すると期間が過ぎたログファイルを削除します。
#>
function Write-Log {
[Alias("log")]
param (
# 出力するメッセージ
[Parameter(ValueFromPipeline, Mandatory, Position=0)]
[String[]] $Messages,
# ファイル情報
[Parameter(Position=1)]
[Alias("File")]
[IO.FileInfo] $LogFile,
# 保持日数
[Parameter(Position=2)]
[Alias("Keep")]
[int] $KeepDays = -1
)
Begin {
$now = Get-Date
$fileName = if ($LogFile -eq $null) { "{0:yyyyMMdd}.log" -f $now } else { $LogFile.FullName }
}
Process {
$Messages | % {
$line = ("{0:yyyy/MM/dd HH:mm:ss.ffff} {1}" -f $now, $_)
try {
echo $line >> $fileName
}
catch {
Write-Host ("ERROR: {0}" -f $_.Exception)
}
finally {
Write-Host $line
}
}
}
End {
if ($KeepDays -ge 0) {
$ago = $now.Date.AddDays(-$KeepDays)
dir -File -Recurse -Include *.log | ? LastWriteTime -lt $ago | del
}
}
}