IISがログを無期限に作成し、古いログファイルを自動的に消去するIIS設定がないように見えることを発見しました。IISログがハードドライブ全体を占有しないように制御下に保つ最良の方法は何ですか?
IISがログを無期限に作成し、古いログファイルを自動的に消去するIIS設定がないように見えることを発見しました。IISログがハードドライブ全体を占有しないように制御下に保つ最良の方法は何ですか?
回答:
そのためには、スケジュールされたタスクを実行する必要があります。動作するはずのPowershellスクリプトを次に示します。
set-location c:\windows\system32\Logfiles\W3SVC1\ -ErrorAction Stop
foreach ($File in get-childitem -include *.log) {
if ($File.LastWriteTime -lt (Get-Date).AddDays(-30)) {
del $File
}
}
これにより、30日以上前に最後に変更されたものはすべてパージされます。最初の行のパスを、ログファイルが保存されている場所に変更します。また、ファイルを保持する期間を-30に変更します。-30は、30日より古いものを削除することを意味します。
あなたはで見ることができ、この記事 FileInfoオブジェクトのためのショーに異なる特性を使用して、LastWriteTimeを使用しない場合ということ。
Get-ChildItem *.* -include *.log
自分で醸造することもできますが、賢い人がすでにこれを書いていると思います。IISLogsおよびIISLogs Liteをご覧ください!
ログをすべて削除している場合は、不要な場合はログをオフにすることができます!サーバーに大量のI / Oを保存します!
私は現在、非常に単純なバッチファイルスクリプトを使用してこれを行っています。
forfiles -p C:\inetpub\logs\LogFiles\ -s -m *.log -d -180 -c "cmd /C DEL @File"
また、スケジュールされたタスクエントリを作成して毎日起動し、そのフォルダのファイル圧縮機能を有効にしました。これらのすべてが、IISファイルの問題を完全に修正しました。
バッチファイル内のスイッチの説明:
実行可能なPowershellの代替を探している場合は、この他の回答を参照してください。IISLogFilesフォルダーを適切に削減する方法に関する他の提案については、この投稿を参照してください。
Microsoftは、そのWebサイトでスクリプトを提案しています。
以下は、ニーズに合わせて使用している修正版です。
Wscript.Echo "Starting log removal"
sLogFolder = "d:\retentiontest"
iMaxAge = 30 'in days
Set objFSO = CreateObject("Scripting.FileSystemObject")
set colFolder = objFSO.GetFolder(sLogFolder)
Wscript.Echo "Removing log files from folder: " & colFolder
For Each colSubfolder in colFolder.SubFolders
Set objFolder = objFSO.GetFolder(colSubfolder.Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles
iFileAge = now-objFile.DateLastModified
if iFileAge > (iMaxAge+1) then
Wscript.Echo "Removing File: " & objFile.Name
objFSO.deletefile objFile, True
end if
Next
Next
コピーされたファイルの場合のように、直感に反して作成日が最終変更日より後になる可能性があるため、「DateCreated」から「DateLastModified」に変更したことに注意してください。おそらく最近更新されたファイルを削除したくないでしょう。
次に、cscript.exeを使用して実行します(例:)cscript.exe d:\scripts\logRetentionScript.vbs
。
サーバーでスケジュールされたタスクを作成します。アクションセクションでは、次のことを行います。
毎日または毎週のスケジュールを設定します。できた