私は長年Apacheを使用してきましたが、Apacheがログのローテーションを処理することは当然だと思っていました。IISの設定を掘り下げてグーグルで調べましたが、ログのローテーションを有効にするためのIISのオプションが見つかりません。
特定のしきい値を超えてログを削除するようにIISを構成する好ましい方法は何ですか?あなたのためにこれを行う製品はありますか?エンタープライズWindowsショップは何をしますか?
構成:IIS 6.0 / Windows Server 2003 32ビット
私は長年Apacheを使用してきましたが、Apacheがログのローテーションを処理することは当然だと思っていました。IISの設定を掘り下げてグーグルで調べましたが、ログのローテーションを有効にするためのIISのオプションが見つかりません。
特定のしきい値を超えてログを削除するようにIISを構成する好ましい方法は何ですか?あなたのためにこれを行う製品はありますか?エンタープライズWindowsショップは何をしますか?
構成:IIS 6.0 / Windows Server 2003 32ビット
回答:
ログのローテーションまたはアーカイブを処理する組み込みのメカニズムはありません。この雑用を処理するサードパーティ製品があるか、何かスクリプトを作成してスケジュールされたタスクを構成できます。IISサーバーはほんの一握りしかないので、30日以上経過したIISログファイルを削除するように毎月通知するようにOutlookで繰り返しタスクを設定しました。
チェック:http : //www.808.dk/?code-iis-log-housekeeping
多数のスクリプトが用意されており、スケジュールされたタスク= logrotationに追加できます:)
IISログツール(http://www.iislogs.com/)をご覧ください。これをインストールする方法はいくつかあり、IISおよびその他のログファイルの管理に非常に効果的な仕事をします(ファイルを.zip形式に圧縮する、別の場所に移動する、特定の日付を過ぎたファイルを削除するなど)。
最近、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
IIS 7では、ログファイルを定期的に削除する構成が導入されています。詳細についてperiodは、次のリンクをご覧ください。
http://www.iis.net/configreference/system.applicationhost/log/centralbinarylogfile
http://www.iis.net/configreference/system.applicationhost/log/centralw3clogfile