LoginSignup
10
15

More than 5 years have passed since last update.

バッチファイルでログローテート

Last updated at Posted at 2019-04-05

システム運用で忘れちゃいけないのがログのローテーション。
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

タスクスケジューラに組み込んだりして使ってください。

10
15
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
10
15