ฉันจะทำให้ไฟล์บันทึก IIS ถูกล้างอย่างสม่ำเสมอได้อย่างไร


20

ฉันเพิ่งค้นพบว่า IIS สร้างบันทึกอย่างไม่มีกำหนดและดูเหมือนจะไม่มีการตั้งค่า IIS ใด ๆ ที่จะล้างไฟล์บันทึกเก่าโดยอัตโนมัติ วิธีที่ดีที่สุดในการเก็บบันทึก IIS ของฉันอยู่ภายใต้การควบคุมเพื่อไม่ให้ฮาร์ดไดรฟ์เต็มทั้งตัว


คุณต้องการเก็บไฟล์เก่าไว้ในไฟล์ zip หรือลบทิ้ง?
Jeff Atwood

คุณคาดว่าจะจัดการไฟล์บันทึกด้วยตนเอง
Evan Anderson

CCLeaner มีตัวเลือกในการล้าง IIS Log Files !!!

คำตอบ:


22

คุณจะต้องทำงานตามกำหนดเวลาเพื่อที่จะทำ นี่คือสคริปต์ 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


1
ใน Windows Server 2008 R2 (PS 2.0) ฉันต้องแก้ไขการเรียก Get-ChildItem ให้เป็นGet-ChildItem *.* -include *.log
roryWoods

4

คุณสามารถชงเองได้ แต่ฉันเชื่อว่ามีคนที่ฉลาดบางคนเขียนสิ่งนี้ให้คุณแล้ว ตรวจสอบIISLogs & IISLogs Lite!

หากการกระทำทั้งหมดของคุณเป็นการลบบันทึกคุณสามารถปิดการเข้าสู่ระบบหากไม่จำเป็น! คุณจะบันทึกเซิร์ฟเวอร์ของคุณเป็นจำนวนมาก I / O!


1
เพียงแค่อัปเดต แต่ IISLogs Lite ไม่สามารถใช้ได้ในบางเวลาและ IISLogs ไม่ถูก
เบคอน Bits

3

ฉันกำลังทำสิ่งนี้โดยใช้สคริปต์แบตช์ไฟล์ที่ง่าย

forfiles -p C:\inetpub\logs\LogFiles\ -s -m *.log -d -180 -c "cmd /C DEL @File"

ฉันยังทำรายการงานตามกำหนดการเพื่อเปิดมันทุกวันและแม้กระทั่งเปิดใช้งานคุณสมบัติการบีบอัดไฟล์ในโฟลเดอร์นั้น: สิ่งต่าง ๆ เหล่านี้เข้าด้วยกันช่วยแก้ไขปัญหาของฉันกับไฟล์ IIS ให้ดี

คำอธิบายของสวิตช์ในไฟล์แบตช์:

  • -s หรือ / S: recurse ในโฟลเดอร์ย่อยทั้งหมด
  • -p หรือ / P: เส้นทาง
  • -m หรือ / M: หน้ากากไฟล์
  • -d หรือ / D: จำนวนวัน (-180 = เก่ากว่า 180 วัน)
  • -c หรือ / C: คำสั่งเพื่อดำเนินการ

หากคุณกำลังมองหาทางเลือกPowershell ที่ทำงานได้ดูคำตอบอื่น ๆ นี้ : สำหรับคำแนะนำอื่น ๆ เกี่ยวกับวิธีการลดโฟลเดอร์ IIS LogFiles อย่างถูกต้องให้ตรวจสอบโพสต์นี้


2

ถ้าคุณต้องการล้างข้อมูลเหล่านั้นเป็นประจำทำไมคุณไม่ปิดใช้งานการบันทึกคำขอใน IIS คุณอาจใช้บางอย่างเช่น Google Analytics หรือบริการอื่น ๆ ฉันเห็นหลาย ๆ คนดองนี้เพื่อหลีกเลี่ยงอาการปวดหัวกับบันทึก IIS ที่มีผลต่อประสิทธิภาพและการกินพื้นที่ดิสก์ทั้งหมด แต่ทั้งหมดขึ้นอยู่กับความต้องการของคุณแน่นอน


1

ไมโครซอฟท์ชี้ให้เห็นสคริปต์บนเว็บไซต์ของมัน

ด้านล่างเป็นรุ่นที่แก้ไขที่ฉันใช้เพื่อความต้องการ

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)


0

สร้างงานที่กำหนดเวลาไว้บนเซิร์ฟเวอร์ ในส่วนการกระทำคุณต้องการ:

  • การดำเนินการ: เริ่มโปรแกรม
  • การตั้งค่า: โปรแกรม = Forfiles
  • เพิ่มอาร์กิวเมนต์: -p "C: \ inetpub \ Logs \ LogFiles" -s -m / D -45 / C "cmd / c del @path"
  • เริ่มใน: C: \

กำหนดตารางเวลารายวันหรือรายสัปดาห์ เสร็จสิ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.