2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【PowerShell】ミリ秒単位でログを日付名のファイルに出力する

Last updated at Posted at 2019-08-22

ログ出力処理

LogUtility.ps1
<#
.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
        }
    }
}

使用方法

Main.ps1
cd $PSScriptRoot
. .\LogUtility.ps1

Write-Log "ログ出力"

$val = 255
log ("val={0}" -f $val)

log (dir .\) -Keep 30

出力結果

yyyyMMdd.log
2019/07/18 09:03:22.6429 ログ出力
2019/07/18 09:03:22.6479 val=255
2019/07/18 09:03:22.6569 .gitignore
2019/07/18 09:03:22.6569 FileUtility.ps1
2019/07/18 09:03:22.6569 LogUtility.ps1
2019/07/18 09:03:22.6569 readme.md
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?