【VBScript】IISのログファイルローテートバッチ

Tips
スポンサーリンク

最近自社で使用しているAPサーバのIISのログが溜まりまくってディスク領域を枯渇させてしまいました・・・。

その際に、IISのログに対して一定期間以前の古いものは全て削除するバッチ処理をVBScriptで作ってタスクスケジューラーにセットしておいたのですが、せっかく作ったので公開しておきます。簡単な作りですし、まぁ動くと思われますが、IISのログファイルの場所はIISマネージャー上で確認し、運用されている環境に合わせてスクリプトの中身を修正してください。

あと、すごいレガシーなWindowsServer上でしか試していないので、新しいWindowsServer上で使用する場合は、管理者権限での実行するとか何かしないとだめかも。

古いIISのアクセスログを削除するサンプルコード

Call Main()

	Sub Main()

		Dim LogFolder
		Dim TargetMonths
		Dim TargetOldDate
		Dim objFileSystem
		Dim objFolder
		Dim objFile,objFile1

			'■実行パラメーター*************************************************
			'Logファイルに保存先フォルダを指定します。
			LogFolder = "C:\WINNT\system32\LogFiles\W3SVC1"
			'何か月前以前のログを削除するか指定します。
			TargetMonths = -3
			'*******************************************************************


			'今日の日付から指定か月前の日付を作成します。
			TargetOldDate = Dateadd("m",TargetMonths,Date)

			'FileSystemObjectを生成します。
			Set objFileSystem = CreateObject("Scripting.FileSystemObject")
			Set objFolder = objFileSystem.GetFolder(LogFolder)

			'指定のフォルダ内のファイルをすべて取得します。
			For Each objFile In objFolder.Files

				Set objFile1 = objFileSystem.GetFile(LogFolder & "\" & objFile.Name)

				'指定か月前の日付とファイルの更新日付を比較し、
				'更新日付の方が古いか否かを判定します。
				If TargetOldDate > objFile1.DateLastModified Then

					'対象のファイルを削除します。
					objFileSystem.DeleteFile LogFolder & "\" & objFile.Name

				End If

			Next

			Set objFile1 = Nothing
			Set objFolder = Nothing
			Set objFileSystem = Nothing

	End Sub

ちょっとした解説

変数:LogFolderにIISのログ保存先フォルダパスを、変数:TargetMonthsに何か月前以前のログを消すか設定します。

後、このスクリプトはIISのログファイルのローテート用と銘打ちましたが、別に削除対象はログファイルじゃなくても何でも良く、指定したフォルダ内の全てのファイルの更新日時をチェックして、古いファイルを消すという実装をしているだけなので、他の用途でも活用出来そうなら活用してみてくださいませ。

ではでは、皆様ごきげんよう~。

タイトルとURLをコピーしました