サイトのログ ファイル <logFile>
- 概要
- 互換性
- セットアップ
- 方法
- 構成
- サンプル コード
※本ページに挿入されている画像をクリックすると、画像全体が別ウィンドウで表示されます。
概要
<site>
要素の <logFile>
要素の属性を使用すると、インターネット インフォメーション サービス (IIS) 7.0 上のサイトのログを構成できます。たとえば、ログの有効化または無効化、IIS ログ ファイルの形式の構成、ログ ファイルに格納する情報のカテゴリの指定、およびログ ファイルが格納されるディレクトリの変更などを行うことができます。また、<logFile>
要素を使用して、ログ ファイルのサイズと時間間隔のいずれかに基づいて IIS で新規ログ ファイルを作成する頻度を制御したり、ログ ファイルの最大サイズ (バイト単位) を制御したりすることができます。
既定では、IIS 7.0 では World Wide Web コンソーシアム (W3C) ログ ファイル形式が使用されます。この設定は、logFormat 属性を IIS、NCSA、または Custom にすることで変更できます。
注 : ODBC ログは IIS 7.0 のカスタム ログ モジュールとして実装されるため、IIS 7.0 での ODBC ログの有効化と構成は次の 2 つの別個の操作で行います。
- <odbcLogging> 要素の ODBC ログ属性を設定します。これらの属性で、システム データ ソース名 (DSN)、テーブル名、ユーザー名、および ODBC 接続用のパスワードを指定します。
<logFile>
要素で正しいカスタム ログ属性を設定します。これらの属性では、ログ ファイル形式を "Custom" に設定し、カスタム ログのプラグイン クラス ID を "{FF16065B-DE82-11CF-BC0A-00AA006111E0}" に設定する必要があります。
ODBC ログの詳細については、<odbcLogging> 要素を参照してください。
IIS でログに記録される情報のカテゴリは、logExtFileFlags 属性を編集することにより定義できます。既定値は、Date
、Time
、ClientIP
、UserName
、ServerIP
、Method
、UriStem
、UriQuery
、TimeTaken
、 HttpStatus
、Win32Status
、ServerPort
、UserAgent
、および HttpSubStatus
です。
注 : 特定のサイトに対して <siteDefaults>
セクションと <site>
セクションの両方で <logFile>
要素が構成されている場合、<site>
セクションの構成がそのサイトに適用されます。
互換性
IIS 7.0 | IIS 6.0 | |
---|---|---|
注意 | <site> の <logFile> は IIS 7.0 で新たに導入された要素です。 |
|
セットアップ
<logFile>
要素は、IIS 7.0 の既定のインストールに含まれています。
方法
サイトのログ設定の編集方法
タスク バーで [スタート] ボタンをクリックし、[管理ツール] をポイントして [インターネット インフォメーション サービス (IIS) マネージャー] をクリックします。
[接続] ウィンドウでサーバー名、[サイト] の順に展開し、ログを構成する Web サイトをクリックします。
[ホーム] ウィンドウで [ログ記録] をダブルクリックします。
[ログ記録] ウィンドウの [形式] ボックスでログ ファイル形式を選択し、[ディレクトリ] ボックスにログ ファイルを格納するディレクトリへのパスを入力するか、[参照] をクリックしてログ ファイルを格納するディレクトリを選択します。
W3C ログ ファイル形式を使用する場合は、[フィールドの選択] をクリックしてログに記録する情報の種類を選択します。
[W3C ログ記録フィールド] ダイアログ ボックスで、ログに記録するオプションのチェック ボックスをオンにし、記録しないオプションのチェック ボックスをオフにして、[OK] をクリックします。
構成
属性
属性 | 説明 |
---|---|
customLogPluginClsid |
オプションの string 属性。 カスタム モジュールに対して、優先順位に従って COM オブジェクト クラス ID (CLSID) を指定します。 |
directory |
オプションの string 属性。 ログ ファイルおよびログ関連のサポート ファイルが格納されるログ記録ディレクトリを指定します。 既定値は %SystemDrive%\inetpub\logs\LogFiles です。 |
enabled |
オプションの Boolean 属性。 サイトのログが有効 (true) か無効 (false) かを指定します。 注 : ASP エラーおよび ODBC エラーは IIS ログ ファイルに記録されません。 既定値は true です。 |
localTimeRollover |
オプションの Boolean 属性。 新規ログ ファイルを、ローカル タイムと世界協定時刻 (UTC) のどちらに基づいて作成するかを指定します (UTC は以前はグリニッジ標準時 (GMT) と呼ばれていました)。false の場合、新規ログ ファイルは UTC に基づいて作成されます。 注 : この設定にかかわらず、W3C 拡張ログの各ログ レコードのタイム スタンプは UTC に基づきます。 既定値は false です。 |
logExtFileFlags |
オプションの flags 属性。 サイトのイベントをログする際、ログ ファイル (W3C 拡張ログ ファイル形式を使用する場合) または ODBC データ ソースのいずれかに書き込まれる情報のカテゴリを指定します。logExtFileFlags 属性には、次の 1 つまたは複数の値を指定できます。複数の値を指定する場合はコンマ (,) で区切ります。 既定値は、" Date , Time , ClientIP , UserName , ServerIP , Method , UriStem , UriQuery , TimeTaken , HttpStatus , Win32Status , ServerPort , UserAgent , HttpSubStatus " です。--------------------------------------------------------------------------------------------------------- 値: BytesRecv 説明:
値: BytesSent 説明:
値: ClientIP 説明:
値: ComputerName 説明:
値: Cookie 説明:
値: Date 説明:
値: Host 説明:
値: HttpStatus 説明:
値: HttpSubStatus 説明:
値: Method 説明:
値: ProtocolVersion 説明:
値: Referer 説明:
値: ServerIP 説明:
値: ServerPort 説明:
値: SiteName 説明:
値: Time 説明:
値: TimeTaken 説明:
値: UriQuery 説明:
値: UriStem 説明:
値: UserAgent 説明:
値: UserName 説明:
値: Win32Status 説明:
|
logFormat |
オプションの enum 属性。 ログ ファイル形式を指定します。logFormat 属性には、次のいずれかの値を指定できます。 既定値は W3C です。--------------------------------------------------------------------------------------------------------- 値: Custom 説明:
値: IIS 説明:
値: NCSA 説明:
値: W3C 説明:
|
period |
オプションの enum 属性。 IIS で新規ログ ファイルを作成する頻度を指定します。period 属性には、次のいずれかの値を指定できます。 既定値は Daily です。--------------------------------------------------------------------------------------------------------- 値: Daily 説明:
値: Hourly 説明:
値: MaxSize 説明:
値: Monthly 説明:
値: Weekly 説明:
|
truncateSize |
オプションの int64 属性。 ログ ファイルの最大サイズをバイト単位で指定します。このサイズに達すると新規ログ ファイルが作成されます。この値は period 属性に対して MaxSize が選択されている場合にのみ適用されます。最小ファイル サイズは 131,072 バイトです。この属性が 131,072 バイトよりも小さい値に設定されている場合は、既定値は暗黙的に 131,072 バイトと見なされます。 既定値は 20971520 です。 |
子要素
なし。
構成サンプル
以下の構成例では、<logFile>
要素の logExtFileFlags 属性を使用して、Contoso という名前の Web サイトに対する IIS ログの設定を指定します。period 属性に従って、新規 W3C ログファイルが 1 時間ごとに作成されます。localTimeRollover 属性は、新規ログ ファイルを作成して名前を付けるタイミングの決定に、ローカル サーバーの時刻を使用するよう指定します。
<site name="Contoso" id="2" serverAutoStart="true">
<application path="/" applicationPool="Contoso">
<virtualDirectory path="/" physicalPath="C:\Contoso\Content" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:www.contoso.com" />
</bindings>
<logFile
period="Hourly"
localTimeRollover="true"
logExtFileFlags="Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, UriQuery, HttpStatus, TimeTaken, ServerPort, UserAgent, HttpSubStatus" />
</site>
サンプル コード
以下の例では、Contoso という名前のサイトのログを構成します。各例では、サイトのログを有効にし、新規ログ ファイルを毎日生成するように構成しています。また、ログ ファイル名の生成および新規ログ ファイルを生成するタイミングの決定に、ローカル サーバーの時刻を使用するよう IIS を構成しています。
AppCmd.exe
appcmd.exe set config -section:system.applicationHost/sites /[name='Contoso'].logFile.logFormat:"W3C"
appcmd.exe set config -section:system.applicationHost/sites /[name='Contoso'].logFile.period:"Daily"
appcmd.exe set config -section:system.applicationHost/sites /[name='Contoso'].logFile.localTimeRollover:"True"
appcmd.exe set config -section:system.applicationHost/sites /[name='Contoso'].logFile.enabled:"True" /commit:apphost
C#
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample
{
private static void Main()
{
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection sitesSection = config.GetSection("system.applicationHost/sites");
ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();
ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"Contoso");
if (siteElement == null) throw new InvalidOperationException("Element not found!");
ConfigurationElement logFileElement = siteElement.GetChildElement("logFile");
logFileElement["logFormat"] = @"W3C";
logFileElement["period"] = @"Daily";
logFileElement["localTimeRollover"] = true;
logFileElement["enabled"] = true;
serverManager.CommitChanges();
}
}
private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
{
foreach (ConfigurationElement element in collection)
{
if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
{
bool matches = true;
for (int i = 0; i < keyValues.Length; i += 2)
{
object o = element.GetAttributeValue(keyValues[i]);
string value = null;
if (o != null)
{
value = o.ToString();
}
if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
{
matches = false;
break;
}
}
if (matches)
{
return element;
}
}
}
return null;
}
}
VB.NET
Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
Sub Main()
Dim serverManager As ServerManager = New ServerManager
Dim config As Configuration = serverManager.GetApplicationHostConfiguration
Dim sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")
Dim sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection
Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "name", "Contoso")
If (siteElement Is Nothing) Then
Throw New InvalidOperationException("Element not found!")
End If
Dim logFileElement As ConfigurationElement = siteElement.GetChildElement("logFile")
logFileElement("logFormat") = "W3C"
logFileElement("period") = "Daily"
logFileElement("localTimeRollover") = True
logFileElement("enabled") = True
serverManager.CommitChanges()
End Sub
Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
For Each element As ConfigurationElement In collection
If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
Dim matches As Boolean = True
Dim i As Integer
For i = 0 To keyValues.Length - 1 Step 2
Dim o As Object = element.GetAttributeValue(keyValues(i))
Dim value As String = Nothing
If (Not (o) Is Nothing) Then
value = o.ToString
End If
If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
matches = False
Exit For
End If
Next
If matches Then
Return element
End If
End If
Next
Return Nothing
End Function
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST");
var sitesCollection = sitesSection.Collection;
var siteElementPos = FindElement(sitesCollection, "site", ["name", "Contoso"]);
if (siteElementPos == -1) throw "Element not found!";
var siteElement = sitesCollection.Item(siteElementPos);
var logFileElement = siteElement.ChildElements.Item("logFile");
logFileElement.Properties.Item("logFormat").Value = "W3C";
logFileElement.Properties.Item("period").Value = "Daily";
logFileElement.Properties.Item("localTimeRollover").Value = true;
logFileElement.Properties.Item("enabled").Value = true;
adminManager.CommitChanges();
function FindElement(collection, elementTagName, valuesToMatch) {
for (var i = 0; i < collection.Count; i++) {
var element = collection.Item(i);
if (element.Name == elementTagName) {
var matches = true;
for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
var property = element.GetPropertyByName(valuesToMatch[iVal]);
var value = property.Value;
if (value != null) {
value = value.toString();
}
if (value != valuesToMatch[iVal + 1]) {
matches = false;
break;
}
}
if (matches) {
return i;
}
}
}
return -1;
}
VBScript
Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")
Set sitesCollection = sitesSection.Collection
siteElementPos = FindElement(sitesCollection, "site", Array("name", "Contoso"))
If siteElementPos = -1 Then
WScript.Echo "Element not found!"
WScript.Quit
End If
Set siteElement = sitesCollection.Item(siteElementPos)
Set logFileElement = siteElement.ChildElements.Item("logFile")
logFileElement.Properties.Item("logFormat").Value = "W3C"
logFileElement.Properties.Item("period").Value = "Daily"
logFileElement.Properties.Item("localTimeRollover").Value = True
logFileElement.Properties.Item("enabled").Value = True
adminManager.CommitChanges()
Function FindElement(collection, elementTagName, valuesToMatch)
For i = 0 To CInt(collection.Count) - 1
Set element = collection.Item(i)
If element.Name = elementTagName Then
matches = True
For iVal = 0 To UBound(valuesToMatch) Step 2
Set Property = element.GetPropertyByName(valuesToMatch(iVal))
value = property.Value
If Not value = Null Then
value = CStr(value)
End If
If Not value = valuesToMatch(iVal + 1) Then
matches = False
Exit For
End If
Next
If matches Then
Exit For
End If
End If
Next
If matches Then
FindElement = i
Else
FindElement = -1
End If
End Function