私は何年もApacheを使用してきましたが、Apacheがログのローテーションを処理することは当たり前のことです。 IIS構成とグーグル検索を行ってきましたが、IISのオプションでログローテーションをオンにすることができません。
IIS特定のしきい値を超えてログを削除するための好ましい方法は何ですか?これを行う製品はありますか?企業向けのWindowsショップは何をしますか?
構成:IIS 6.0/Windows Server 2003 32-bit
ログのローテーションやアーカイブを処理するための組み込みのメカニズムはありません。この雑用を処理するサードパーティ製品があるか、何かをスクリプト化してスケジュールされたタスクを構成することができます。 IISサーバーのハンドフルしかないため、Outlookで定期的なタスクを設定し、毎月、IIS 30日より古いログファイルを削除するように通知します。
チェック: http://www.808.dk/?code-iis-log-Housekeeping
たくさんのスクリプトが利用可能で、スケジュールされたタスク= logrotationに追加できます:)
IIS Logs tool( http://www.iislogs.com/ )を見てください。これをインストールするにはいくつかの方法があります。 IISおよびその他のログファイルの管理(ファイルを.Zip形式に圧縮する、別の場所に移動する、特定の日付を過ぎたファイルを削除するなど)における非常に効果的なジョブ).
Robocopyを使用してファイルを「古い」という名前のサブディレクトリにコピーするようにスケジュールされたタスクを設定します。これには/ minage:xというスイッチがあり、30、60などの任意の値に設定できます。次に、そのディレクトリ内のすべてを削除します。私はこれを数十台のサーバーでこの方法で行っていますが、これでうまくいくようです。
IIS 7では、ログファイルを定期的に削除する構成が導入されています。詳細については、次のリンクのperiod
を参照してください。
http://www.iis.net/configreference/system.applicationhost/log/centralbinarylogfile
http://www.iis.net/configreference/system.applicationhost/log/centralw3clogfile
他の答えは適切であり、この問題に対してより堅牢なソリューションを提供します。簡単な修正が必要な場合は、CCleanerをセットアップして、ログインするたびに、またはスケジュールに従って、ログフォルダーを自動的にクリーンアップできます。
ただし、これにより、古いファイルだけでなく、allログが削除されることに注意してください。
私は これらの指示 に従いましたが、サーバーでの通常のケースのように、ユーザーがログオフした場合でも実行したいことを追加しました。
これは、スケジュールされたタスクとバッチファイルを使用して行うことができます。
forfiles -p "C:\Path\To\Log\Files" -m *.* /D -30 /C "cmd /c del @path"
私は最近これを提起しました Powershell.orgフォーラムの同じ質問 。その後、ログ消去ルーチンの必要性を解決するために使用する、Desired State Configurationのスクリプトリソースのハックを投稿しました。たぶん、このコードのいくつかは他の人に役立つでしょう。
# 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