バッチファイルでログローテート
システム運用で忘れちゃいけないのがログのローテーション。
Windowsにはlinuxみたいにlogrotateが実装されていないので、バッチファイルで実現します。
logrotate.bat
@echo off
cd /d %~dp0
:: ローテしたいファイル(バッチを置いた場所に応じて、絶対パスまたは相対パスを渡す)
set LogFile=%1
:: 超えたらローテさせるByte数(例:1048576 = 1MB)
set LimitByte=%2
call :getTimeStamp
call :checkFileSize "%LogFile%"
if %FileSize% gtr %LimitByte% (
rem ローテーション
move "%LogFile%" "%LogFile%_%TimeStamp%"
)
exit /b
:: ファイルサイズチェック
:checkFileSize
setlocal
endlocal & set FileSize=%~z1
exit /b
:: タイムスタンプの取得
:getTimeStamp
setlocal
set YYYY=%DATE:~0,-6%
set MM=%DATE:~5,-3%
set DD=%DATE:~-2%
set /a H=%TIME:~0,-9%
set M=%TIME:~3,-6%
set S=%TIME:~6,-3%
if %H% lss 10 (
set H=0%H%
)
endlocal & set TimeStamp=%YYYY%%MM%%DD%-%H%%M%%S%
exit /b
第二引数のバイト数にゼロを渡せば問答無用でローテーションします。
実行してみる。
>type nul > 0Byte.txt
>fsutil file createnew 1MByte.txt 1048576
>fsutil file createnew 5MByte.txt 5242880
>dir
2019/04/05 12:10 <DIR> .
2019/04/05 12:10 <DIR> ..
2019/04/05 12:05 0 0Byte.txt
2019/04/05 12:07 1,048,576 1MByte.txt
2019/04/05 12:07 5,242,880 5MByte.txt
2019/04/05 12:02 739 logrotate.bat
>logrotate.bat 0Byte.txt 1024
>logrotate.bat 1MByte.txt 0
1 個のファイルを移動しました。
>logrotate.bat 5MByte.txt 5242881
>logrotate.bat 5MByte.txt 5242879
1 個のファイルを移動しました。
>dir
2019/04/05 12:17 <DIR> .
2019/04/05 12:17 <DIR> ..
2019/04/05 12:05 0 0Byte.txt
2019/04/05 12:07 1,048,576 1MByte.txt_20190405-121649
2019/04/05 12:07 5,242,880 5MByte.txt_20190405-121743
2019/04/05 12:16 782 logrotate.bat
タスクスケジューラに組み込んだりして使ってください。
Author And Source
この問題について(バッチファイルでログローテート), 我々は、より多くの情報をここで見つけました https://qiita.com/danishi/items/c5f1277ac6375b94bc56著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .