Làm cách nào để thiết lập IIS để xoay vòng nhật ký?


21

Tôi đã sử dụng Apache trong nhiều năm và tôi đã cho rằng nó xử lý vòng quay nhật ký cho tôi. Tôi đã đào qua cấu hình IIS và googling, nhưng tôi không thể tìm thấy tùy chọn nào cho IIS để bật xoay vòng nhật ký.

Cách ưa thích để cấu hình IIS để xóa các bản ghi vượt qua một ngưỡng nhất định là gì? Có sản phẩm nào ngoài đó làm điều này cho bạn? Các cửa hàng Windows ồn ào làm gì?

Cấu hình: IIS 6.0 / Windows Server 2003 32-bit


Một câu hỏi rất hay. IIS không có xoay vòng, nhưng không xử lý purging, cũng không lưu trữ. Tôi không hiểu tại sao một sản phẩm, quá trưởng thành trong các lĩnh vực khác, lại thiếu một tính năng cơ bản như vậy. Với cấu hình mặc định, IIS tự tử bằng cách điền vào ổ đĩa gốc bằng nhật ký. (Tôi đoán điều tương tự cũng có thể được nói đối với SQL và nhật ký giao dịch của nó.)
Nathan Hartley

Câu trả lời:


11

Không có cơ chế tích hợp để xử lý luân chuyển hoặc lưu trữ nhật ký. Có thể có các sản phẩm của bên thứ ba để xử lý công việc này hoặc bạn có thể viết kịch bản gì đó và định cấu hình tác vụ theo lịch trình. Tôi chỉ có một số ít các máy chủ IIS nên tôi chỉ thiết lập một Nhiệm vụ định kỳ trong Outlook để nhắc nhở tôi hàng tháng để xóa các tệp nhật ký IIS cũ hơn 30 ngày.


5
Điều đó nghe thật đau đớn. Hãy thử lên lịch trình này ... Get-ChildItem E: \ log * -Inc loại trừ ex * .log -Recurse | Trường hợp-Đối tượng {$ _. LastWriteTime -lt (Ngày nhận) .AddDays (-30)} | Loại bỏ vật phẩm
Nathan Hartley


5

Hãy xem công cụ Nhật ký IIS ( http://www.iislogs.com/ ). Có một số cách khác nhau để cài đặt cái này và thực hiện công việc rất hiệu quả trong việc quản lý IIS và các tệp nhật ký khác (nén tệp sang định dạng .zip, di chuyển chúng đến các vị trí khác nhau, xóa các tệp qua một ngày nhất định, v.v.).


1

Thiết lập một tác vụ theo lịch trình để sử dụng bản sao lưu để sao chép các tệp vào thư mục con có tên "cũ". Nó có một công tắc, / minage: x mà bạn có thể đặt thành 30,60 hoặc bất cứ điều gì bạn cảm thấy. Sau đó xóa mọi thứ trong thư mục đó. Tôi đang làm theo cách này trên một vài chục máy chủ, và nó dường như thực hiện mánh khóe.


0

Các câu trả lời khác là tốt, và cung cấp một giải pháp mạnh mẽ hơn cho vấn đề này. Nếu bạn chỉ cần sửa chữa nhanh, bạn có thể thiết lập CCleaner để tự động xóa thư mục nhật ký của bạn mỗi khi bạn đăng nhập hoặc theo lịch trình.

Mặc dù vậy, hãy ghi nhớ rằng điều này sẽ xóa tất cả các bản ghi, không chỉ các tệp cũ.

Tôi đã làm theo các hướng dẫn này nhưng nói thêm rằng tôi muốn nó chạy ngay cả khi người dùng đã đăng xuất, như trường hợp bình thường trên máy chủ.


0

Gần đây tôi đã đặt ra câu hỏi tương tự trên diễn đàn Powershell.org . Sau đó, cuối cùng tôi đã đăng một bản hack Tài nguyên tập lệnh cho Cấu hình trạng thái mong muốn, mà tôi sẽ sử dụng để giải quyết nhu cầu của mình về thói quen thanh lọc nhật ký. Có thể một số mã này sẽ hữu ích cho những người khác.

# 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 giới thiệu một cấu hình để định kỳ xóa các tệp nhật ký. Để biết thêm thông tin xem periodtrong các liên kết sau:

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

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


1
Tôi không nghĩ tính năng này xóa các tệp nhật ký, nó chỉ xác định khoảng thời gian tạo tệp nhật ký mới, tức là hàng ngày, hàng giờ, v.v. Tài liệu bạn liên kết xác định khoảng thời gian là "Chỉ định tần suất đóng tệp nhật ký hiện tại và một tệp nhật ký mới được bắt đầu. " Không có đề cập đến việc xóa.
Somantra

0

Bạn có thể làm điều này với một tác vụ theo lịch trình và một tệp bó.

forfiles -p "C:\Path\To\Log\Files" -m *.* /D -30 /C "cmd /c del @path"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.