【PowerShell】バッチのログ出力クラス作成
PowerShellバッチの実行結果を出力するログ出力クラスのサンプルコードを記載します。
サンプルコードは必要に応じて変更して使用してください。
<環境>
OS:Windows10(64bit)
PSVersion:v5.1
ログ出力クラス
ログ出力クラス概要
- ログレベル
- ログファイル作成
- ログ書き込み
ログレベルは、Info、Warn、Errorが指定可能。
コンストラクタでログファイルを作成する。
ログレベル、出力パス、ファイル名を指定する。
ファイル名にタイムスタンプ(yyyyMMddHHmmss)を付与する。
yyyyMMddHHmmss_[ファイル名].log
ログレベル、出力パス、ファイル名を指定する。
ファイル名にタイムスタンプ(yyyyMMddHHmmss)を付与する。
yyyyMMddHHmmss_[ファイル名].log
ログレベルごとのログ書き込みメソッドを作成する。
書き込み処理はOut-Fileコマンドレットを使用する。
ログ出力フォーマットは以下で作成する。
[yyyyMMddHHmmss][ログレベル] メッセージ
書き込み処理はOut-Fileコマンドレットを使用する。
ログ出力フォーマットは以下で作成する。
[yyyyMMddHHmmss][ログレベル] メッセージ
スクリプト例
# ログレベル
enum MyLogLevel {
Info = 0
Warn
Error
}
# ログクラス
class MyLogger {
[MyLogLevel] $level
[string]$filepath
# ログファイル作成
MyLogger([MyLogLevel] $level, [String]$path, [String]$name) {
$this.level = $level
$timestamp = Get-Date -Format "yyyyMMddHHmmss"
$this.filepath = "$($path.TrimEnd("\"))\$($timestamp)_$($name).log"
Out-File $this.filepath
}
# Info ログ書き込み
[void] Info([string] $msg)
{
if($this.level -le [MyLogLevel]::Info)
{
$timestamp = Get-Date -Format "yyyyMMddHHmmss"
"[$($timestamp)][Info] $($msg)" | Out-File $this.filepath -Append
}
}
# Warn ログ書き込み
[void] Warn([string] $msg)
{
if($this.level -le [MyLogLevel]::Warn)
{
$timestamp = Get-Date -Format "yyyyMMddHHmmss"
"[$($timestamp)][Warn] $($msg)" | Out-File $this.filepath -Append
}
}
# Error ログ書き込み
[void] Error([string] $msg)
{
if($this.level -le [MyLogLevel]::Error)
{
$timestamp = Get-Date -Format "yyyyMMddHHmmss"
"[$($timestamp)][Error] $($msg)" | Out-File $this.filepath -Append
}
}
}
$ErrorActionPreference = "Stop"
$log = $null
try
{
# ログインスタンス作成
$log = [MyLogger]::new([MyLogLevel]::Info, "C:\work\logs", "batch")
$log.Info("===== バッチ処理 開始 =====")
# 以下にバッチ処理実装
}
catch
{
$log.Error("*** 例外発生***")
$log.Error($_.Exception.Message)
$log.Error($_.ScriptStackTrace)
}
finally
{
$log.Info("===== バッチ処理 終了 =====")
}