【PowerShell】バッチのログ出力クラス作成

【PowerShell】バッチのログ出力クラス作成

PowerShellバッチの実行結果を出力するログ出力クラスのサンプルコードを記載します。
サンプルコードは必要に応じて変更して使用してください。

<環境>
OS:Windows10(64bit)
PSVersion:v5.1

ログ出力クラス

ログ出力クラス概要
  • ログレベル
  • ログレベルは、Info、Warn、Errorが指定可能。

  • ログファイル作成
  • コンストラクタでログファイルを作成する。
    ログレベル、出力パス、ファイル名を指定する。
    ファイル名にタイムスタンプ(yyyyMMddHHmmss)を付与する。

    yyyyMMddHHmmss_[ファイル名].log

  • ログ書き込み
  • ログレベルごとのログ書き込みメソッドを作成する。
    書き込み処理は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("===== バッチ処理 終了 =====")
}


Previous Post