見出し画像

【PowerShell】 ログをファイルに出力したい

処理中のログをwrite-hostでコンソールに表示するのが普通だと思うのですがファイルに出力したいこともあると思います。
ファイルに出力する関数を作りましたので記事にしてみました。

function outputlog($logmsg,$LogFilePath=".\log.txt"){
  #ファイルにログを出力する
  # -logmsg 出力したい文言
  # -LogFilePath ログファイルのフルパス

  $LogPath = $LOGFILE
  $logmsg= "$(Get-Date -format 'yyyy/MM/dd HH:mm:ss') $logmsg"
  $logmsg| Out-File -Append -FilePath "$LogFilePath" -Encoding utf8
}


outputlog -logmsg "あああああ" -LogFilePath "c:\temp\log.txt"
というように使います。ファイルの中身は下のようになります

2024/07/21 16:00:00 あああああ



ログファイルが大きくなり過ぎたら小さくする処理

テキストファイルに書き込むだけだと関数にする必要もないのでログファイルが大きくなり過ぎたら小さくする処理を入れてみました。
ログファイルが大きくなったらリネームして別ファイルコピーするのが正しいのでしょうがPowerShellで作る仕組みだと、あまり遡らないと思うのでログが5000件超えたら1000件に減らすようにしてみました。

function outputlog($logmsg,$LogFilePath=".\log.txt"){
  #ファイルにログを出力する
  # -logmsg 出力したい文言
  # -LogFilePath ログファイルのフルパス

  $LogPath = $LOGFILE
  $logmsg= "$(Get-Date -format 'yyyy/MM/dd HH:mm:ss') $logmsg"
  $logmsg | Out-File -Append -FilePath "$LogFilePath" -Encoding utf8

  #5000行を超えたら1000行に減らす処理
  $lineCount = (Get-Content "$LogFilePath").Count
  if($lineCount -ge 5000) {
    Get-Content "$LogFilePath" | Select-Object -last 1000 | Out-File -FilePath "$LogFilePath" -Encoding utf8
  }

}


#PowerShell #ログファイル #ログ #プログラミング学習 #プログラミング初心者 #業務効率化

この記事が気に入ったらサポートをしてみませんか?