ฉันเพิ่งค้นพบว่า 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 ที่ทำงานได้ดูคำตอบอื่น ๆ นี้ : สำหรับคำแนะนำอื่น ๆ เกี่ยวกับวิธีการลดโฟลเดอร์ IIS LogFiles อย่างถูกต้องให้ตรวจสอบโพสต์นี้
ถ้าคุณต้องการล้างข้อมูลเหล่านั้นเป็นประจำทำไมคุณไม่ปิดใช้งานการบันทึกคำขอใน IIS คุณอาจใช้บางอย่างเช่น Google Analytics หรือบริการอื่น ๆ ฉันเห็นหลาย ๆ คนดองนี้เพื่อหลีกเลี่ยงอาการปวดหัวกับบันทึก IIS ที่มีผลต่อประสิทธิภาพและการกินพื้นที่ดิสก์ทั้งหมด แต่ทั้งหมดขึ้นอยู่กับความต้องการของคุณแน่นอน
ไมโครซอฟท์ชี้ให้เห็นสคริปต์บนเว็บไซต์ของมัน
ด้านล่างเป็นรุ่นที่แก้ไขที่ฉันใช้เพื่อความต้องการ
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
)
สร้างงานที่กำหนดเวลาไว้บนเซิร์ฟเวอร์ ในส่วนการกระทำคุณต้องการ:
กำหนดตารางเวลารายวันหรือรายสัปดาห์ เสร็จสิ้น