ฉันจะติดตั้ง IIS เพื่อหมุนบันทึกได้อย่างไร


21

ฉันใช้ Apache มาหลายปีแล้วและยอมรับว่ามันรองรับการหมุนเวียนของบันทึกสำหรับฉัน ฉันขุดผ่านการกำหนดค่า IIS และ googling แต่ฉันไม่สามารถหาตัวเลือกสำหรับ IIS เพื่อเปิดใช้งานการหมุนบันทึก

วิธีที่แนะนำในการกำหนดค่า IIS ให้ลบบันทึกผ่านเกณฑ์ที่กำหนดคืออะไร มีผลิตภัณฑ์อะไรบ้างที่ทำเพื่อคุณหรือไม่ ร้านค้า Windows ที่กล้าได้กล้าเสียทำอะไร

การกำหนดค่า: IIS 6.0 / Windows Server 2003 32 บิต


เป็นคำถามที่ดีมาก IIS มีการหมุน แต่ไม่จัดการการกวาดล้างหรือการเก็บถาวร ฉันไม่เข้าใจว่าเพราะเหตุใดผลิตภัณฑ์ถึงจะเติบโตในพื้นที่อื่น ๆ จะขาดหายไปเช่นคุณสมบัติพื้นฐาน ด้วยการกำหนดค่าเริ่มต้น IIS กระทำการฆ่าตัวตายด้วยการกรอกไดรฟ์รากด้วยบันทึก (ฉันเดาเดียวกันสามารถกล่าวว่าสำหรับ SQL และล็อกธุรกรรมของตน.)
นาธานฮาร์ทลี่

คำตอบ:


11

ไม่มีกลไกในตัวในการจัดการการหมุนหรือการเก็บถาวร อาจมีผลิตภัณฑ์ของบุคคลที่สามเพื่อจัดการงานนี้หรือคุณสามารถเขียนสคริปต์บางอย่างและกำหนดค่างานที่กำหนด ฉันมีเซิร์ฟเวอร์ IIS เพียงไม่กี่ตัวเท่านั้นดังนั้นฉันเพิ่งตั้งค่ากิจวัตรประจำวันใน Outlook เพื่อเตือนฉันทุกเดือนให้ลบไฟล์บันทึก IIS ที่มีอายุมากกว่า 30 วัน


5
นั่นฟังดูเจ็บปวด ลองกำหนดเวลานี้ ... Get-ChildItem E: \ log * -Include ex * .log -Recurse | โดยที่-Object {$ _. LastWriteTime -lt (Get-Date) .AddDays (-30)} | ลบรายการ
Nathan Hartley


5

ดูเครื่องมือ IIS Logs ( http://www.iislogs.com/ ) มีสองวิธีที่แตกต่างกันในการติดตั้งสิ่งนี้และทำงานได้อย่างมีประสิทธิภาพมากในการจัดการ IIS และไฟล์บันทึกอื่น ๆ (บีบอัดไฟล์เป็นรูปแบบ. zip ย้ายไปยังตำแหน่งอื่นลบไฟล์ผ่านวันที่กำหนด ฯลฯ )


1

ตั้งค่างานที่กำหนดเวลาไว้เพื่อใช้ robocopy เพื่อคัดลอกไฟล์ไปยังไดเรกทอรีย่อยชื่อ "old" มันมีสวิตช์ / minage: x ที่คุณสามารถตั้งค่าเป็น 30,60 หรืออะไรก็ตามที่คุณรู้สึก จากนั้นลบทุกอย่างในไดเรกทอรีนั้น ฉันทำอย่างนี้กับเซิร์ฟเวอร์สองโหลและดูเหมือนว่าจะหลอกลวง


0

คำตอบอื่น ๆ นั้นดีและเสนอวิธีแก้ปัญหาที่มีประสิทธิภาพมากขึ้นสำหรับปัญหานี้ หากคุณต้องการการแก้ไขด่วนคุณสามารถตั้งค่า CCleaner เพื่อล้างโฟลเดอร์บันทึกของคุณโดยอัตโนมัติทุกครั้งที่คุณเข้าสู่ระบบหรือตามกำหนดเวลา

อย่างไรก็ตามโปรดทราบว่าการทำเช่นนี้จะเป็นการลบไฟล์บันทึกทั้งหมดไม่ใช่ไฟล์เก่า

ฉันทำตามคำแนะนำเหล่านี้แต่เพิ่มว่าฉันต้องการให้มันทำงานแม้ในขณะที่ผู้ใช้ออกจากระบบเป็นกรณีปกติบนเซิร์ฟเวอร์


0

ฉันเพิ่งโพสต์นี้คำถามเดียวกันในฟอรั่ม Powershell.org จากนั้นก็จบลงด้วยการโพสต์แฮ็คของทรัพยากรสคริปต์สำหรับการกำหนดค่าสถานะที่ต้องการซึ่งฉันจะใช้เพื่อแก้ไขความต้องการของฉันสำหรับขั้นตอนการล้างข้อมูลบันทึก บางทีรหัสนี้อาจมีประโยชน์กับผู้อื่น

# Requires an E: drive.

configuration LogDirectory
{
    param (
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string[]]$Node
    )
    node $Node
    {
        Script LogDirectoryScript
        {
            GetScript = {
                $result = (Test-Path 'E:\log') -and (schtasks.exe /query /TN Purge_Log_Folder | Select-String Purge_Log_Folder -Quiet)
                return @{
                    GetScript = $GetScript
                    SetScript = $SetScript
                    TestScript = $TestScript
                    Result = $result
                }
            }

            SetScript = {
                Write-Verbose 'Creating log directory.'
                if ( -not (Test-Path 'E:\log')) { 
                    New-Item -ItemType Directory -Path 'E:\log'
                }

                Write-Verbose 'Changing permissions to log directory such that any user can write, but only an administrator can read or modify.'
                $acl = (Get-Item 'E:\log').GetAccessControl('Access')
                $acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule('Users','Write', 'Allow')))
                Set-Acl -Path 'E:\log' -AclObject $acl | Out-Host

                Write-Verbose 'Scheduling purge task.'
                $script = 'Get-ChildItem E:\log\* -Include ex*.log -Recurse  | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-7)} | Remove-Item'
                Set-Content -Path C:\Windows\Purge_Log_Folder.ps1 -Value $script
                $task = 'Powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -File C:\Windows\Purge_Log_Folder.ps1'
                SCHTASKS /CREATE /TN Purge_Log_Folder /TR $task /SC DAILY /ST 23:59 /RU SYSTEM /F | Out-Host

                Write-Verbose 'Configuring IIS'
                # Default Log File Settings for Web Sites <logFile>
                # http://www.iis.net/configreference/system.applicationhost/sites/sitedefaults/logfile
                Import-Module WebAdministration
                Set-WebConfigurationProperty '/system.applicationHost/sites/siteDefaults' -name logFile -value @{
                    directory = 'E:\log'
                    localTimeRollover ='true'
                    period = 'Hourly'
                }
            }

            TestScript = {
                (Test-Path 'E:\log') -and (schtasks.exe /query /TN Purge_Log_Folder | Select-String Purge_Log_Folder -Quiet)
            }
        }
    }
} 
LogDirectory

0

IIS 7 แนะนำการกำหนดค่าให้ลบไฟล์บันทึกเป็นระยะ ๆ สำหรับข้อมูลเพิ่มเติมดูที่periodลิงค์ต่อไปนี้:

http://www.iis.net/configreference/system.applicationhost/log/centralbinarylogfile

http://www.iis.net/configreference/system.applicationhost/log/centralw3clogfile


1
ฉันไม่คิดว่าคุณสมบัตินี้จะลบไฟล์บันทึกมันระบุเฉพาะช่วงเวลาสำหรับการสร้างไฟล์บันทึกใหม่เช่นรายวันรายชั่วโมง ฯลฯ เอกสารที่คุณเชื่อมโยงกำหนดระยะเวลาเป็น "ระบุความถี่ของไฟล์บันทึกปัจจุบันที่ถูกปิดและ ไฟล์บันทึกใหม่เริ่มทำงาน " ไม่มีการเอ่ยถึงการลบ
Somantra

0

คุณสามารถทำสิ่งนี้กับงานที่กำหนดเวลาไว้และแบตช์ไฟล์

forfiles -p "C:\Path\To\Log\Files" -m *.* /D -30 /C "cmd /c del @path"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.