- 追加された行はこの色です。
- 削除された行はこの色です。
#navi(機能別)
''よく掲示板で質問される、ログファイルのハンドリングについてまとめてみようかと''
#contents
////////////////////////////////////////////////////////////////////////////
*
*概要 [#v0276371]
各種ログファイルを一定期間保存する処理について、
処理パターンを分類して管理方法を整理する。
:共通前提|
ログファイルが、%LOG%\log.txt に毎日出力されるとする。
これを、%OLDLOG% ディレクトリに保存する。~
[[機能別/日時を得る]]手段によって、YYYYMMDD や YYYYMM という環境変数に
年月日などがセットされているものとする。~
処理日の前日の日付を使うなら、[[機能別/日時計算]]によって前日日付を求めて
YYYYMMDD にセットする。
////////////////////////////////////////////////////////////////////////////
*世代番号管理 [#tcaca121]
保存ログファイルに一連番号をつけ、一定世代(NMAX)を超えたものは削除する。
一世代前のログファイルは log1.txt、二世代前は log2.txt 等とする。
set NMAX=30
for /l %%N in (%NMAX%,-1,2) do call :shift %%N
move "%LOG%\log.txt" "%OLDLOG%log1.txt"
goto :eof
:shift
set /a L=%1-1
if exist "%OLDLOG%\log%L%.txt" move /y "%OLDLOG%\log%L%.txt" "%OLDLOG%\log%1.txt"
goto :eof
////////////////////////////////////////////////////////////////////////////
*日付ファイル名での一定日数保存(世代管理) [#b56ea92a]
保存ログのファイル名は、logYYYYMMDD.txt のように年月日をつける。
一定日数(NMAX)保存し、それを超えたものは削除する。
set NMAX=90
move "%LOG%\log.txt" "%OLDLOG%\log%YYYYMMDD%.txt"
for /f "skip=%NMAX% delims=" %%F in ('dir /b /o-n "%OLDLOG%\log????????.txt"') do del "%%F"
////////////////////////////////////////////////////////////////////////////
*日付ファイル名でのnヶ月保存 [#wc5f1145]
保存ログのファイル名は、logYYYYMMDD.txt のように年月日をつける。
Nヶ月保存し、それを超えたものは削除する。
set N=3
move "%LOG%\log.txt" "%OLDLOG%\log%YYYYMMDD%.txt"
set /a M=1%YYYYMMDD:~4,2%-100
if %M% gtr %N% (set /a OLD=YYYYMMDD-N*100) ELSE (set /a OLD=YYYYMMDD-10000+1200-N*100)
for %%F in ("%OLDLOG%\log????????.txt") do if %%~nF leq log%OLD% del "%%F"
ここでは、N は12以下とした。13ヶ月以上の場合は、年と月に分けて、
それぞれ引き算するとよいだろう。
////////////////////////////////////////////////////////////////////////////
*日付ファイル名でのnヶ月保存(年月ディレクトリ管理) [#c7036116]
保存ログのファイル名は、logYYYYMMDD.txt のように年月日をつける。
%OLDLOG% の下に %YYYYMM% のディレクトリを作ってそこに保存し、
Nヶ月経ったらディレクトリごと削除する。
set N=3
if not exist "%OLDLOG%\%YYYYMM%\*" md "%OLDLOG%\%YYYYMM"
move "%LOG%\log.txt" "%OLDLOG%\%YYYYMM%\log%YYYYMMDD%.txt"
set /a M=1%YYYYMM:~4,2%-100
if %M% gtr %N% (set /a OLD=YYYYMM-N) ELSE (set /a OLD=YYYYMM-100+12-N)
if exist "%OLDLOG%\%OLD%\*" rd /s /q "%OLDLOG%\%OLD%"
ここでは、N は12以下とした。13ヶ月以上の場合は、年と月に分けて、
それぞれ引き算するとよいだろう。
////////////////////////////////////////////////////////////////////////////
#navi(機能別)