网站的日志文件 <logFile>

概述

<site> 元素的 <logFile> 元素包含可用于为 IIS 7 及更高版本上的站点配置日志记录的属性。

例如,你可以启用或禁用日志记录、配置 IIS 日志文件的格式、指定要存储在日志文件中的信息类别,以及更改日志文件的存储目录。 还可以使用 <logFile> 元素来控制 IIS 根据日志文件大小或时间间隔创建新日志文件的频率,以及日志文件可以达到的最大大小(以字节为单位)。

默认情况下,IIS 7 及更高版本使用万维网联合会 (W3C) 日志文件格式。 可以通过将 logFormat 属性修改为 IIS、NCSA或 Custom 来更改此设置

注意

在 IIS 7 及更高版本中,ODBC 日志记录作为自定义日志记录模块实现。 因此,在 IIS 7 及更高版本中启用和配置 ODBC 日志记录包含两个单独的操作:

  • <odbcLogging> 元素中设置 ODBC 日志记录属性。 这些属性指定 ODBC 连接的系统数据源名称 (DSN)、表名、用户名和密码。
  • <logFile> 元素中设置正确的自定义日志记录属性。 这些属性必须将日志文件格式设置为“Custom”,并将自定义日志插件类 ID 设置为“{FF16065B-DE82-11CF-BC0A-00AA006111E0}”。

有关 ODBC 日志记录的详细信息,请参阅 <odbcLogging> 元素。

可以通过编辑 logExtFileFlags 属性来定义 IIS 记录的信息类别。 默认值为 DateTimeClientIPUserNameServerIPMethodUriStemUriQueryTimeTakenHttpStatusWin32StatusServerPortUserAgentHttpSubStatusReferer

注意

如果在特定站点的 <siteDefaults> 部分和 <site> 部分中都配置了 <logFile> 元素,则会将 <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 字段的内容,并在 logExtFileFlags 属性的默认值中添加了 referer 标志。
IIS 7.5 <logFile> 元素在 IIS 7.5 中未进行修改。
IIS 7.0 <site> 元素的 <logFile> 元素是在 IIS 7.0 中引入的。
IIS 6.0 <logFile> 元素取代了 IIS 6.0 IIsWebService 元数据库对象上的日志记录属性部分

安装

<logFile> 元素包含在 IIS 7 及更高版本的默认安装中。

操作方式

如何编辑站点的日志记录设置

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 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. 在“开始”窗格中,双击“日志记录”
    Screenshot of the Default Web Site Home page. The icon for Logging is highlighted.

  4. 在“日志记录”窗格的“格式”框中,选择日志文件格式,然后在“目录”框中键入存储日志文件的目录的路径,或单击“浏览...”以选择要在其中存储日志文件的目录
    Screenshot of the Logging page within I I S Manager.

  5. 如果选择使用 W3C 日志文件格式:

    • 单击“选择字段”以选择要记录的信息类型
    • 在“W3C 日志记录字段”对话框中,选中要记录的选项的复选框,清除不想记录的选项的复选框,然后单击“确定”
      Screenshot of the W 3 C Logging Fields dialog box.

如何为 W3C 日志配置 ETW 或文件日志记录

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 Windows Server 2012 R2:

      • 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows 8.1:

      • 按住 Windows 键,按字母 X,然后单击“控制面板”
      • 单击“管理工具”,然后双击“Internet Information Services (IIS)管理器”
  2. 在“连接”窗格中,展开服务器名称,展开“站点”,然后选择一个站点

  3. 在站点的主窗格中,双击“日志记录”

  4. 在“日志记录”主页中,对于“日志事件目标”,选择“仅日志文件”、“仅 ETW 事件”或“日志文件和 ETW 事件”

    Screenshot of the I I S Manager window displaying the Logging page.

如何配置按条目计数刷新 W3C 日志

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 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. 在“操作”窗格中,单击“应用”

    Screenshot of the Collection Editor Window. Flush By Entry Count W 3 C Log is highlighted in the Properties field.

如何配置最大日志行长度

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 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. 在“操作”窗格中,单击“应用”

    Screenshot of the Collection Editor window. Max Log Line Length is highlighted in the Properties field.

配置

特性

属性 说明
customLogPluginClsid 可选的字符串属性。

按优先级顺序为自定义模块指定一个或多个 COM 对象类 ID (CLSID)。
directory 可选的字符串属性。

指定日志记录目录,其中存储日志文件和与日志记录相关的支持文件。

默认值为 %SystemDrive%\inetpub\logs\LogFiles
enabled 可选布尔属性。

指定是为站点启用 (true) 还是禁用 (false) 日志记录

注意:ASP 和 ODBC 错误不会记录在 IIS 日志文件中

默认值为 true
flushByEntryCountW3CLog 可选 uint 属性。

指定在将事件刷新到日志文件之前存储在缓冲区中的事件数。 数字越小,事件刷新的速度越快,但磁盘操作次数越多,性能越差。 若要更实时地排除故障,请降低该值;若要提高性能,请提高该值。 如果值为 0,则指定以默认最大值 64k 进行刷新。

默认值为 0
localTimeRollover 可选布尔属性。

指定是基于本地时间还是协调世界时 (UTC)(以前称为格林威治标准时间 (GMT))创建新日志文件。 如果为 false,则基于 UTC 创建新日志文件。

注意:无论设置如何,每个 W3C 扩展日志记录的时间戳都是基于 UTC 的

默认值为 false
logExtFileFlags 可选 flags 属性。

指定在记录站点事件期间写入日志文件(使用 W3C 扩展日志文件格式时)或 ODBC 数据源的信息类别。 logExtFileFlags 属性可为以下一个或多个值。 如果指定多个值,请用逗号 (,) 分隔。

默认值为 DateTimeClientIPUserNameServerIPMethodUriStemUriQueryTimeTakenHttpStatusWin32StatusServerPortUserAgentHttpSubStatusReferer
说明
BytesRecv 记录服务器接收的字节数。
BytesSent 记录服务器发送的字节数。
ClientIP 记录发出请求的客户端的 IP 地址。
ComputerName 记录在其上生成日志文件条目的服务器的名称。
Cookie 记录接收到的 Cookie 内容(如果存在任何内容)。
Date 记录活动的发生日期。
Host 记录主机头名称(如果有)。
HttpStatus 记录 HTTP 状态代码。
HttpSubStatus 记录 HTTP 错误的子状态代码。 例如,对于 500.18 HTTP 错误,状态代码为 500,子状态代码为 18。
Method 记录请求的操作。 例如,GET、POST 等
ProtocolVersion 记录客户端使用的协议版本。
Referer 记录用户上次访问的站点。 此站点提供指向当前站点的链接。
ServerIP 记录在其上生成日志文件条目的服务器的 IP 地址。
ServerPort 记录为站点配置的服务器端口号。
SiteName 记录站点的 Internet 服务名称和实例编号。
Time 记录活动发生的时间,采用协调世界时 (UTC)。
TimeTaken 记录完成请求所用的时间。 所用时间以毫秒为单位记录。

注意:客户端请求时间戳在 HTTP.sys 收到第一个字节时、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 日志文件格式时所记录的字段的列表:
  • 客户端 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 可选布尔属性。

指定 s-sitename 字段将包含站点名称 (false) 或站点 ID (true)。 如果“每个属性一个日志文件”设置为 Site(内置默认值),则默认情况下日志文件中不会出现 s-sitename 列,因为日志文件名属性将改为包含站点 ID。 如果“每个属性一个日志文件”设置为 Server,则默认情况下日志文件中将包含 s-sitename 列。

默认值为 True,即 s-sitename 字段包含站点 ID。 若要改为记录站点名称,请将 logSiteID 设置为 False
logTargetW3C 可选 Flags 属性。

指定 IIS 是否将使用 Windows 事件跟踪 (ETW) 和/或文件日志记录来处理记录的 IIS 事件。 ETW 提供实时日志记录,并使用 ETW 提供程序和标准查询机制。 文件日志记录将事件数据存储在文本文件中,你可以分析这些文件以访问日志记录数据。

当 IIS 使用日志文件时,HTTP.sys 在事务完成后将数据直接记录到文本日志文件中。 使用 ETW 时,HTTP.sys 使用 iislogging 提供程序将数据发送到 ETW,LOGSVC 服务则管理日志数据,包括查询 ETW 数据、直接从工作进程收集数据以及将数据发送到日志文件。

logTargetW3C 属性可能具有以下值。 默认值为 File。 如果在 applicationHost.config 中为站点的 logTargetW3C 同时列出了 FileETW,则相当于在 IIS 管理器的“日志记录”窗格中为站点的日志文件设置选择了“日志文件和 ETW 事件”
说明
File IIS 事件数据将存储在文本日志文件中。 若要处理事件数据,必须分析基于文本的日志文件。 文本日志文件的处理和刷新需要时间,因此你无法实时处理事件数据。

数值为 1
ETW IIS 不会将数据直接记录到文本文件中,而是将记录的信息发送到 Windows 事件跟踪(Windows 内置的通用事件机制)。 可以使用标准查询工具(如 Message Analyzer )或自定义工具来管理记录的数据。 ETW 实时处理记录的信息,使你能够筛选和查看数据,以及动态启用或禁用日志记录。 ETW 还可向事件数据添加详细信息,提供 HTTP.sys 无权访问的数据。 有关详细信息,请参阅事件跟踪

数值为 2
maxLogLineLength 可选 uint 属性。

指定日志文件中行的最大长度。 可用于限制通过日志记录累积的数据量,节省磁盘空间,尤其是在添加自定义日志记录字段时。

范围从 2 到 65,536。 默认值为 65536
period 可选 enum 属性。

指定 IIS 创建新日志文件的频率。 period 属性可为以下值之一。

默认值为 Daily
说明
Daily 每天创建一个新日志文件。

数值为 1
Hourly 每小时创建一个新日志文件。

数值为 4
MaxSize 达到最大大小时创建一个新日志文件。 truncateSize 属性中指定了最大大小。

数值为 0
Monthly 每月创建一个新日志文件。

数值为 3
Weekly 每周创建一个新日志文件。

数值为 2
truncateSize 可选 int64 属性。

指定日志文件的最大大小(以字节为单位),超过该大小后将创建新日志文件。 仅当为 period 属性选择了 MaxSize 时,此值才适用。 最小文件大小为 1,048,576 字节。 如果将此属性设置为小于 1,048,576 字节的值,则会隐式将默认值假定为 1,048,576 字节。

默认值为 20971520

子元素

元素 说明
customFields 可选元素。

指定 W3C 日志中自定义字段集合的配置设置。

配置示例

以下配置示例使用 <logFile> 元素的 logExtFileFlags 属性来指定 IIS 为名为 Contoso 的网站记录日志的设置。 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 配置这些设置时,必须确保将 commit 参数设置为 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