サイトのログ ファイル <logFile>

  • 概要
  • 互換性
  • セットアップ
  • 方法
  • 構成
  • サンプル コード

※本ページに挿入されている画像をクリックすると、画像全体が別ウィンドウで表示されます。

概要

<site> 要素の <logFile> 要素の属性を使用すると、インターネット インフォメーション サービス (IIS) 7.0 上のサイトのログを構成できます。たとえば、ログの有効化または無効化、IIS ログ ファイルの形式の構成、ログ ファイルに格納する情報のカテゴリの指定、およびログ ファイルが格納されるディレクトリの変更などを行うことができます。また、<logFile> 要素を使用して、ログ ファイルのサイズと時間間隔のいずれかに基づいて IIS で新規ログ ファイルを作成する頻度を制御したり、ログ ファイルの最大サイズ (バイト単位) を制御したりすることができます。

既定では、IIS 7.0 では World Wide Web コンソーシアム (W3C) ログ ファイル形式が使用されます。この設定は、logFormat 属性を IISNCSA、または 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 属性を編集することにより定義できます。既定値は、DateTimeClientIPUserNameServerIPMethodUriStemUriQueryTimeTaken HttpStatusWin32StatusServerPortUserAgent、および HttpSubStatus です。

: 特定のサイトに対して <siteDefaults> セクションと <site> セクションの両方で <logFile> 要素が構成されている場合、<site> セクションの構成がそのサイトに適用されます。

互換性

  IIS 7.0 IIS 6.0
注意 <site><logFile> は IIS 7.0 で新たに導入された要素です。

<logFile> 要素は、IIS 6.0 の IIsWebService メタベース オブジェクトのログ プロパティのセクションに代わるものです。

セットアップ

<logFile> 要素は、IIS 7.0 の既定のインストールに含まれています。

方法

サイトのログ設定の編集方法

  1. タスク バーで [スタート] ボタンをクリックし、[管理ツール] をポイントして [インターネット インフォメーション サービス (IIS) マネージャー] をクリックします。

  2. [接続] ウィンドウでサーバー名、[サイト] の順に展開し、ログを構成する Web サイトをクリックします。

  3. [ホーム] ウィンドウで [ログ記録] をダブルクリックします。

    拡大

  4. [ログ記録] ウィンドウの [形式] ボックスでログ ファイル形式を選択し、[ディレクトリ] ボックスにログ ファイルを格納するディレクトリへのパスを入力するか、[参照] をクリックしてログ ファイルを格納するディレクトリを選択します。

    拡大

  5. W3C ログ ファイル形式を使用する場合は、[フィールドの選択] をクリックしてログに記録する情報の種類を選択します。

  6. [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

説明:

  • 要求を作成したクライアントの IP アドレスをログに記録します。

値: ComputerName

説明:

  • ログ ファイル エントリが生成されたサーバーの名前をログに記録します。

値: Cookie

説明:

  • 送信または受信された Cookie のコンテンツをログに記録します (コンテンツが存在する場合)。

値: Date

説明:

  • アクティビティが発生した日付をログに記録します。

値: Host

説明:

  • ホスト ヘッダーがある場合、ホスト ヘッダー名をログに記録します。

値: HttpStatus

説明:

  • HTTP 状態コードをログに記録します。

値: HttpSubStatus

説明:

  • HTTP エラーの副状態コードをログに記録します。たとえば、500.18 HTTP エラーの場合、状態コードは 500 で副状態コードは 18 です。

値: Method

説明:

  • 要求されたアクション (例 : GET メソッド) をログに記録します。

値: ProtocolVersion

説明:

  • クライアントが使用したプロトコルのバージョンをログに記録します。

値: Referer

説明:

  • ユーザーが最後に訪問したサイトをログに記録します。このサイトから現在のサイトへのリンクが提供されました。

値: ServerIP

説明:

  • ログ ファイル エントリが生成されたサーバーの IP アドレスをログに記録します。

値: ServerPort

説明:

  • サービスに構成されているサーバー ポート番号をログに記録します。

値: SiteName

説明:

  • クライアントで実行されていたインターネット サービス名とインスタンス番号をログに記録します。

値: Time

説明:

  • アクティビティが発生した時刻を世界協定時刻 (UTC) でログに記録します。

値: TimeTaken

説明:

  • 要求が完了するまでにかかった時間をログに記録します。時間はミリ秒単位で記録されます。
    注 : クライアント要求のタイムスタンプは、HTTP.sys が最初のバイトを受信してから要求の解析を開始するまでの間に初期化されます。また、クライアント要求のタイムスタンプは、IIS で最後の送信が完了すると停止します。かかった時間には、ネットワーク上での時間は反映されません。サイトへの最初の要求は、他の同様の要求よりも所要時間が少し長くなります。これは、HTTP.sys が最初の要求を含めるログ ファイルを開くためです。

値: UriQuery

説明:

  • クライアントが実行しようとしたクエリがある場合は、それをログに記録します。ユニバーサル リソース識別子 (URI) クエリは動的なページにのみ必要で、通常は URL に渡されるパラメーターで構成されます。

値: UriStem

説明:

  • アクションのターゲットである、ユニバーサル リソース識別子 (URI) ステム情報をログに記録します (例 : Default.htm)。

値: UserAgent

説明:

  • クライアントが使用したブラウザーの種類をログに記録します。

値: UserName

説明:

  • サーバーにアクセスした認証済みユーザーの名前をログに記録します。匿名ユーザーはハイフンで示されます。

値: Win32Status

説明:

  • Windows 状態コードをログに記録します。
logFormat オプションの enum 属性。

ログ ファイル形式を指定します。logFormat 属性には、次のいずれかの値を指定できます。

既定値は W3C です。

---------------------------------------------------------------------------------------------------------

値: Custom

説明:

  • カスタム ログ モジュールにカスタム ログ ファイル形式を使用します。
  • 数値は 3 です。

値: IIS

説明:

  • Microsoft IIS ログ ファイル形式を使用してサイトに関する情報を記録します。この形式は HTTP.sys によって処理される、固定の ASCII テキストベース形式です。つまり、ログに記録されるフィールドをカスタマイズできません。フィールドはコンマで区切られ、時刻はローカル タイムで記録されます。次の一覧は、IIS ログ ファイル形式を使用した場合にログに記録されるフィールドを示しています。
    • Client IP address
    • User name
    • Date
    • Time
    • Service and instance
    • Server name
    • Server IP address
    • Time taken
    • Client bytes sent
    • Server bytes sent
    • Service status code (値 200 は要求が正常に処理されたことを示します。)
    • Windows status code (値 0 は要求が正常に処理されたことを示します。)
    • Request type
    • Target of operation
    • Parameters (スクリプトに渡されるパラメーターです。)
    すべてのフィールドにデータが含まれるわけではありません。フィールドにデータが含まれない場合は、ハイフン (-) がプレースホルダーとして表示されます。フィールドに印刷できない文字が含まれる場合は、その文字が HTTP.sys によってプラス記号 (+) に置き換えられ、ログ ファイル形式が保持されます。
  • 数値は 0 です。

値: NCSA

説明:

  • National Center for Supercomputing Applications (NCSA) 共通ログ ファイル形式を使用してサイトに関する情報を記録します。この形式は HTTP.sys によって処理される、固定の ASCII テキストベース形式です。つまり、ログに記録されるフィールドをカスタマイズできません。フィールドはスペースで区切られ、時刻はローカル タイムと世界協定時刻 (UTC) のオフセットで記録されます。次の一覧は、NCSA 共通ログ ファイル形式を使用した場合にログに記録されるフィールドを示しています。
    • Remote host address
    • Remote log name (この値は常にハイフンです。)
    • User name
    • Date, time, and UTC offset
    • Request and protocol version
    • Service status code (値 200 は要求が正常に処理されたことを示します。)
    • Bytes sent
    すべてのフィールドにデータが含まれるわけではありません。フィールドにデータが含まれない場合は、ハイフン (-) がプレースホルダーとして表示されます。フィールドに印刷できない文字が含まれる場合は、その文字が HTTP.sys によってプラス記号 (+) に置き換えられ、ログ ファイル形式が保持されます。
  • 数値は 1 です。

値: W3C

説明:

  • W3C 拡張ログ ファイル形式を使用してサイトに関する情報を記録します。この形式は HTTP.sys によって処理される、カスタマイズ可能な ASCII テキストベース形式です。つまり、ログに記録されるフィールドを指定できます。logExtFileFlags 属性で、記録されるフィールドを指定します。フィールドはスペースで区切られ、時刻は世界協定時刻 (UTC) で記録されます。
  • 数値は 2 です。
period オプションの enum 属性。

IIS で新規ログ ファイルを作成する頻度を指定します。period 属性には、次のいずれかの値を指定できます。

既定値は Daily です。

---------------------------------------------------------------------------------------------------------

値: Daily

説明:

  • 新規ログ ファイルを毎日作成します。
  • 数値は 1 です。

値: Hourly

説明:

  • 新規ログ ファイルを毎時間作成します。
  • 数値は 4 です。

値: MaxSize

説明:

  • 最大サイズに達したら新規ログ ファイルを作成します。最大サイズは、truncateSize 属性で指定します。
  • 数値は 0 です。

値: Monthly

説明:

  • 新規ログ ファイルを毎月作成します。
  • 数値は 3 です。

値: Weekly

説明:

  • 新規ログ ファイルを毎週作成します。
  • 数値は 2 です。
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