如何设置IIS以旋转日志?


21

我已经使用Apache多年了,我认为它可以为我处理日志轮换是理所当然的。我一直在研究IIS配置并进行谷歌搜索,但是我找不到IIS打开日志循环的选项。

配置IIS以删除超过特定阈值的日志的首选方法是什么?有没有适合您的产品?企业Windows商店做什么?

配置:IIS 6.0 / Windows Server 2003 32位


一个很好的问题。IIS确实具有旋转功能,但不处理清除或归档。我不明白为什么在其他领域如此成熟的产品会缺少这种基本功能。使用默认配置,IIS会通过用日志填充根驱动器来自杀。(我想对于SQL及其事务日志也可以这样说。)
Nathan Hartley 2014年

Answers:


11

没有内置的机制来处理日志旋转或归档。可能会有第三方产品来处理此杂务,或者您可以编写一些脚本并配置计划的任务。我只有少数IIS服务器,因此我只是在Outlook中设置了一个定期任务,以提醒我每月删除30天以上的IIS日志文件。


5
听起来很痛苦。尝试安排此时间... Get-ChildItem E:\ log * -include ex * .log-递归| 哪里的对象{$ _。LastWriteTime -lt(Get-Date).AddDays(-30)} | 删除项目
内森·哈特利2014年


5

查看IIS日志工具(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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.