網站 < logFile 的記錄檔>

概觀

元素 <logFile><site> 元素包含屬性,可讓您在 IIS 7 和更新版本上設定月臺的記錄。

例如,您可以啟用或停用記錄、設定 IIS 記錄檔的格式、指定要儲存在記錄檔中的資訊類別,以及變更儲存記錄檔的目錄。 您也可以使用 <logFile> 元素來控制 IIS 根據記錄檔大小或時間間隔建立新記錄檔的頻率,以及記錄檔可以變成的位元組大小上限,) 以位元組為單位 (大小上限。

根據預設,IIS 7 和更新版本會使用 World Wide Web Consortium (W3C) 記錄檔格式。 您可以將 logFormat 屬性修改為 IISNCSACustom來變更此設定。

注意

ODBC 記錄會實作為 IIS 7 和更新版本中的自訂記錄模組。 因此,在 IIS 7 和更新版本中啟用和設定 ODBC 記錄包含兩個不同的動作:

  • 在 專案中設定 ODBC 記錄屬性 <odbcLogging> 。 這些屬性會指定 ODBC 連線的系統資料來源名稱 (DSN) 、資料表名稱、使用者名稱和密碼。
  • 在 元素中 <logFile> 設定正確的自訂記錄屬性。 這些屬性必須將記錄檔格式設定為 「Custom」,並將自訂記錄外掛程式類別識別碼設定為 「{FF16065B-DE82-11CF-BC0A-00AA006111E0}」。

如需 ODBC 記錄的詳細資訊,請參閱 <odbcLogging> 元素。

您可以編輯 logExtFileFlags 屬性,以定義 IIS 記錄的資訊類別。 預設值為 Date 、、、、 ClientIPUriStemMethodServerIPUriQueryUserNameUserAgentServerPortHttpStatusTimeTakenWin32Status 、、 HttpSubStatus 和 。 RefererTime

注意

如果專案 <logFile> 同時在 <siteDefaults> 區段和 <site> 特定月臺的 區段中設定,則區段中的 <site> 組態會用於該月臺。

除了標準記錄集之外,IIS 8.5 還可讓您記錄自訂欄位。 記錄檔格式必須是 W3C,才能新增自訂欄位。 如需詳細資訊,請參閱customFields

相容性

版本 備註
IIS 10.0 <logFile> IIS 10.0 中未修改專案。
IIS 8.5 已新增 flushByEntryCountW3CLog 屬性,以指定要儲存在緩衝區中的事件數目,然後再排清至記錄檔。 已新增 logTargetW3C 屬性,以指定記錄的 IIS 事件處理方式。 已新增 maxLogLineLength 屬性,以指定記錄檔中行的最大長度。 已新增 <customFields> 子專案。
IIS 8.0 logSiteId 新增 屬性以指定 -sitename 欄位的內容,並將 referer 旗標新增至屬性的 logExtFileFlags 預設值。
IIS 7.5 <logFile> 在 IIS 7.5 中修改專案。
IIS 7.0 元素 <logFile><site> 元素是在 IIS 7.0 中引進。
IIS 6.0 元素 <logFile> 會取代 IIS 6.0 IIsWebService 中繼基底物件上記錄屬性的區段。

安裝程式

專案 <logFile> 包含在 IIS 7 和更新版本的預設安裝中。

作法

如何編輯網站的記錄設定

  1. (IIS) 管理員開啟 Internet Information Services

    • 如果您使用 Windows Server 2012 或 Windows Server 2012 R2:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows 8 或 Windows 8.1:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows Server 2008 或 Windows Server 2008 R2:

      • 在工作列上,按一下 [ 開始],指向 [ 系統管理工具],然後按一下 [ Internet Information Services (IIS) 管理員]。
    • 如果您使用 Windows Vista 或 Windows 7:

      • 在工作列上,按一下 [開始],然後按一下[主控台]。
      • 按兩下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
  2. 在 [ 連線 ] 窗格中,展開伺服器名稱、[ 網站],然後按一下您要設定記錄的網站。

  3. 在 [ 首頁] 窗格中,按兩下 [ 記錄]。
    預設網站首頁的螢幕擷取畫面。[記錄] 圖示會反白顯示。

  4. 在 [ 記錄 ] 窗格中,選取 [ 格式 ] 方塊中的記錄檔格式,然後在 [ 目錄 ] 方塊中輸入您儲存記錄檔之目錄的路徑,或按一下 [ 流覽...] 來選擇要儲存記錄檔的目錄。
    I I S Manager 中 [記錄] 頁面的螢幕擷取畫面。

  5. 如果您選擇使用 W3C 記錄檔格式:

    • 按一下 [選取欄位 ] 以選擇要記錄的資訊類型。
    • 在 [ W3C 記錄欄位] 對話方塊中,選取您要記錄之選項的核取方塊,清除您不想記錄的選項核取方塊,然後按一下 [ 確定]。
      [W 3 C 記錄欄位] 對話方塊的螢幕擷取畫面。

如何設定 W3C 記錄的 ETW 或檔案記錄

  1. (IIS) 管理員開啟 Internet Information Services

    • 如果您使用 Windows Server 2012 R2:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows 8.1:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
  2. 在 [ 連線 ] 窗格中,展開伺服器名稱、展開 [站台],然後選取月臺。

  3. 在網站的首頁窗格中,按兩下 [記錄]。

  4. [記錄 ] 首頁的 [ 記錄事件目的地] 中,選取 [僅限記錄檔]、[ 僅限 ETW 事件] 或 [記錄檔] 和 [ETW 事件]。

    顯示 [記錄] 頁面的 [I I S 管理員] 視窗螢幕擷取畫面。

如何依專案計數設定排清 W3C 記錄

  1. (IIS) 管理員開啟 Internet Information Services

    • 如果您使用 Windows Server 2012 R2:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows 8.1:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
  2. 在 [ 連線 ] 窗格中展開伺服器,然後按兩下 [ 組態編輯器]。

  3. 在 [ 組態編輯器] 中,針對 [ 區段] 展開 system.applicationHost ,然後選取 [月臺]。

  4. 按一下 [ (集合]) ,然後按一下省略號。

  5. 選取您要設定的網站,然後展開 logFile

  6. 針對 flushByEntryCountW3Clog,輸入要儲存在緩衝區中的事件數目,再排清到記錄檔。

  7. 在 [ 動作 ] 窗格中,按一下 [ 套用]。

    集合編輯器視窗的螢幕擷取畫面。[屬性] 欄位中會反白顯示 [依專案計數 W 3 C 記錄檔排清]。

如何設定記錄行長度上限

  1. (IIS) 管理員開啟 Internet Information Services

    • 如果您使用 Windows Server 2012 R2:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows 8.1:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
  2. 在 [ 連線 ] 窗格中展開伺服器,然後按兩下 [ 組態編輯器]。

  3. 在 [ 組態編輯器] 中,針對 [ 區段] 展開 system.applicationHost ,然後選取 [月臺]。

  4. 按一下 [ (集合]) ,然後按一下省略號。

  5. 選取您要設定的網站,然後展開 logFile

  6. 針對 maxLogLineLength,在記錄檔的單一行中輸入最大位元組數。

  7. 在 [ 動作 ] 窗格中,按一下 [ 套用]。

    [集合編輯器] 視窗的螢幕擷取畫面。[屬性] 欄位中醒目提示 [記錄行長度上限]。

組態

屬性

屬性 描述
customLogPluginClsid 選擇性字串屬性。

指定自訂模組的 COM 物件類別識別碼 (CLSID) 或識別碼。
directory 選擇性字串屬性。

指定記錄目錄,其中會儲存記錄檔和記錄相關的支援檔案。

預設值是 %SystemDrive%\inetpub\logs\LogFiles
enabled 選擇性的 Boolean 屬性。

指定是否為網站啟用記錄 (true) 或停用 (false) 。

注意: ASP 和 ODBC 錯誤不會記錄在 IIS 記錄檔中。

預設值是 true
flushByEntryCountW3CLog 選擇性 uint 屬性。

指定要儲存在緩衝區中的事件數目,再排清到記錄檔。 較低的數目會導致事件更快速地排清,因為效能會因為磁片作業數目更大而造成。 請減少此值以進行更即時的疑難排解,以提升效能。 的值 0 指定排清會在預設最大值 64k 時發生。

預設值是 0
localTimeRollover 選擇性的 Boolean 屬性。

指定是否根據當地時間或國際標準時間 (UTC) 建立新的記錄檔,這先前稱為 Greenwich Mean Time (GMT) 。 如果為 false,則會根據 UTC 建立新的記錄檔。

注意: 不論設定為何,每個 W3C 擴充記錄記錄的時間戳記都是以 UTC 為基礎。

預設值是 false
logExtFileFlags 選擇性旗標屬性。

指定當您使用 W3C 擴充記錄檔格式) 或月臺記錄事件期間 ODBC 資料來源時,寫入記錄檔 (的資訊類別。 logExtFileFlags屬性可以是下列一或多個值。 如果您指定多個值,請使用逗號分隔 (,) 。

預設值為 Date 、、、、 ClientIPRefererWin32StatusHttpStatusServerPortTimeTakenUserAgentServerIPMethodUriQueryHttpSubStatusUserNameUriStemTime
描述
BytesRecv 記錄伺服器收到的位元組數目。
BytesSent 記錄伺服器傳送的位元組數目。
ClientIP 記錄發出要求之用戶端的 IP 位址。
ComputerName 記錄產生記錄檔專案的伺服器名稱。
Cookie 如果有任何內容存在,請記錄所接收 Cookie 的內容。
Date 記錄活動發生的日期。
Host 如果有主機標頭名稱,請記錄。
HttpStatus 記錄 HTTP 狀態碼。
HttpSubStatus 記錄 HTTP 錯誤的子狀態碼。 例如,針對 500.18 HTTP 錯誤,狀態碼為 500,子狀態碼為 18。
Method 記錄要求的動作。 例如, GETPOST等。
ProtocolVersion 記錄用戶端使用的通訊協定版本。
Referer 記錄使用者上次流覽的網站。 這個網站提供目前網站的連結。
ServerIP 記錄產生記錄檔專案之伺服器的 IP 位址。
ServerPort 記錄為月臺設定的伺服器埠號碼。
SiteName 記錄月臺的網際網路服務名稱和實例號碼。
Time 以國際標準時間 (UTC) 記錄發生活動的時間。
TimeTaken 記錄要求完成所花費的時間長度。 所花費的時間會以毫秒為單位記錄。

注意:用戶端要求時間戳記會在HTTP.sys收到第一個位元組時初始化,但在HTTP.sys開始剖析要求之前。 用戶端要求時間戳記會在上次 IIS 傳送完成時停止。 花費的時間不會反映整個網路的時間。 網站的第一個要求顯示比其他類似要求所花費的時間稍長,因為HTTP.sys開啟包含第一個要求的記錄檔。
UriQuery 記錄查詢,如果有的話,用戶端嘗試執行。 只有動態頁面才需要通用資源識別碼 (URI) 查詢,而且通常是由傳遞至 URL 的參數所組成。
UriStem 記錄通用資源識別碼 (URI) 字幹資訊,這是動作的目標。 例如,Default.htm。
UserAgent 記錄用戶端使用的瀏覽器類型。
UserName 記錄存取伺服器之已驗證使用者的名稱。 匿名使用者會以連字號表示。
Win32Status 記錄 Windows 狀態碼。
logFormat 選擇性列舉屬性。

指定記錄檔格式。 logFormat屬性可以是下列其中一個值。

預設值是 W3C
描述
Custom 使用自訂記錄模組的自訂記錄檔格式。

數值為 3
IIS 使用 Microsoft IIS 記錄檔格式來記錄網站的相關資訊。 此格式是由 HTTP.sys 處理,且是「固定的」ASCII 文字格式,這表示您無法自訂記錄欄位。 欄位會以逗號分隔,而時間會記錄為本地時間。 下列清單是您使用 IIS 記錄檔格式時所記錄的欄位清單︰
  • 用戶端 IP 位址
  • 使用者名稱
  • 日期
  • 時間
  • 服務和實例
  • 伺服器名稱
  • 伺服器 IP 位址
  • 花費的時間
  • 傳送的用戶端位元組
  • 已傳送的伺服器位元組
  • Service status code (值為 200 表示已順利完成要求)。
  • Windows status code (值為 0 表示已順利完成要求)。
  • 要求類型
  • 作業目標
  • 參數 (傳遞至腳本的參數)
並非所有欄位都會包含資料。 如果欄位不包含資料,則連字號 (-) 會顯示為預留位置。 如果欄位包含不可列印的字元,HTTP.sys 會以 加號 (+) 取代該字元以保留記錄檔格式。

數值為 0
NCSA 使用國家/地區中心進行超級計算應用程式 (NCSA) 常見記錄檔格式來記錄網站的相關資訊。 此格式是由 HTTP.sys 處理,且是「固定的」ASCII 文字格式,這表示您無法自訂記錄欄位。 欄位會以空格分隔,而時間會記錄為包含國際標準時間 (UTC) 位移的當地時間。 下列清單是您使用 NCSA 通用記錄檔格式時所記錄的欄位清單︰
  • 遠端主機位址
  • Remote log name (此值一律為連字號)。
  • 使用者名稱
  • 日期、時間和 UTC 位移
  • 要求和通訊協定版本
  • Service status code (值為 200 表示已順利完成要求)。
  • 傳送的位元組數
並非所有欄位都會包含資料。 如果欄位不包含資料,則連字號 (-) 會顯示為預留位置。 如果欄位包含不可列印的字元,HTTP.sys 會以 加號 (+) 取代該字元以保留記錄檔格式。

數值為 1
W3C 使用 W3C 擴充記錄檔格式來記錄月臺的相關資訊。 這種格式是由 HTTP.sys 處理,而且是格式「可自訂的」 ASCII 文字型格式,這表示您可指定所記錄的欄位。 指定 記錄在 logExtFileFlags 屬性中的欄位。 欄位會以空格分隔,而時間會以國際標準時間 (UTC) 記錄。

數值為 2
logSiteId 選擇性的 Boolean 屬性。

指定 s-sitename 欄位將包含網站名稱 (false) ,或網站識別碼 (true) 。 如果每個屬性的一個記錄檔設定為 Site (現成的預設值],則預設不會在記錄檔中取得 s-sitename 資料行,因為記錄檔名稱屬性會改為包含網站識別碼。 如果每個屬性的一個記錄檔設定 Server 為 ,則預設會將 -s-sitename 資料行包含在記錄檔中。

預設值為 True ,表示 s-sitename 欄位包含網站識別碼。 若要改為記錄月臺名稱,請將 logSiteID 設定為 False
logTargetW3C 選擇性旗標屬性。

指定 IIS 是否會針對 Windows (ETW 使用事件追蹤) 和/或檔案記錄來處理記錄的 IIS 事件。 ETW 提供即時記錄和使用 ETW 提供者和標準查詢機制。 檔案記錄會將事件資料儲存在您可以剖析以存取記錄資料的文字檔中。

當 IIS 使用記錄檔時,HTTP.sys交易完成後,將資料直接記錄到文字記錄檔中。 使用 ETW 時,HTTP.sys使用 iislogging 提供者將資料傳送到 ETW,而 LOGSVC 服務會記錄管理資料,包括查詢 ETW 以取得資料、直接從背景工作進程收集資料,以及將資料傳送至記錄檔。

屬性 logTargetW3C 可以有下列可能的值。 預設值是 FileFile如果 和 ETW 都列 logTargetW3C 于 applicationHost.config 中的網站,這相當於在 IIS 管理員的 [記錄] 窗格中,針對網站的記錄檔設定選取[記錄檔] 和 [ETW 事件]。
描述
File IIS 事件資料會儲存在文字記錄檔中。 若要處理事件資料,您必須剖析以文字為基礎的記錄檔。 文字記錄檔需要一段時間來處理和排清,因此您將無法即時處理事件資料。

數值為 1
ETW IIS 不會將資料直接記錄到文字檔,而是將記錄的資訊傳送至 Windows 事件追蹤,這是 Windows 內建的一般事件機制。 您可以使用標準查詢工具來記錄管理的資料,例如訊息分析器或自訂工具。 ETW 會即時處理記錄的資訊,並可讓您以動態方式篩選和檢視資料,以及啟用或停用記錄。 ETW 也會將詳細資訊新增至事件資料,並提供HTTP.sys無法存取的資料。 如需詳細資訊,請參閱 事件追蹤

數值為 2
maxLogLineLength 選擇性 uint 屬性。

指定記錄檔中行的最大長度。 這可讓您限制記錄所累積的資料量,並節省磁碟空間,特別是當您新增自訂記錄欄位時。

範圍是 2 到 65,536。 預設值是 65536
period 選擇性列舉屬性。

指定 IIS 建立新記錄檔的頻率。 period 屬性可以是下列其中一個可能的值。

預設值是 Daily
描述
Daily 每天建立新的記錄檔。

數值為 1
Hourly 每小時建立新的記錄檔。

數值為 4
MaxSize 達到大小上限時,請建立新的記錄檔。 截斷Size 屬性中指定大小上限。

數值為 0
Monthly 每月建立新的記錄檔。

數值為 3
Weekly 每週建立新的記錄檔。

數值為 2
truncateSize 選擇性 int64 屬性。

指定要在其中建立新記錄檔的位元組) (記錄檔大小上限。 只有在針對 period 屬性選擇 MaxSize 時,才適用此值。 檔案大小下限為 1,048,576 個位元組。 如果此屬性設定為小於 1,048,576 個位元組的值,則預設值會隱含假設為 1,048,576 個位元組。

預設值是 20971520

子元素

元素 描述
customFields 選擇性項目。

指定 W3C 記錄檔中自訂欄位集合的組態設定。

組態範例

下列組態範例會使用 專案的 logExtFileFlags 屬性 <logFile> ,指定名為 Contoso 的網站 IIS 記錄的設定。 period屬性會讓 IIS 每小時建立新的 W3C 記錄檔;localTimeRollover屬性會指定 IIS 會使用本機伺服器上的時間來判斷何時要建立並命名新的記錄檔。

<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

注意

當您使用AppCmd.exe設定這些設定時,請務必將 認可 參數 apphost 設定為 。 這會將組態設定認可至ApplicationHost.config檔案中適當的位置區段。

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 IsNull(value) Then
               value = CStr(value)
            End If
            If Not value = CStr(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