Файлы журнала для файла журнала веб-сайта <>

Общие сведения

Элемент <logFile><site> элемента содержит атрибуты, позволяющие настроить ведение журнала для сайта в IIS 7 и более поздних версиях.

Например, можно включить или отключить ведение журнала, настроить формат файла журнала IIS, указать категории сведений для хранения в файле журнала и изменить каталог, в котором хранится файл журнала. Элемент также можно использовать для <logFile> управления тем, как часто СЛУЖБЫ IIS создают новый файл журнала на основе размера файла журнала или интервала времени и максимального размера (в байтах), которым может стать файл журнала.

По умолчанию СЛУЖБЫ IIS 7 и более поздних версий используют формат файла журнала консорциума W3C. Этот параметр можно изменить, изменив атрибут logFormat на IIS, NCSA или Custom.

Примечание

Ведение журнала ODBC реализовано в виде пользовательского модуля ведения журнала в IIS 7 и более поздних версиях. В результате включение и настройка ведения журнала ODBC в IIS 7 и более поздних версиях состоит из двух отдельных действий:

  • Задание атрибутов ведения журнала ODBC в элементе <odbcLogging> . Эти атрибуты указывают системное имя источника данных (DSN), имя таблицы, имя пользователя и пароль для подключения ODBC.
  • Задание правильных настраиваемых атрибутов ведения журнала в <logFile> элементе . Эти атрибуты должны задать для файла журнала формат "Пользовательский", а для идентификатора класса пользовательского подключаемого модуля журнала — "{FF16065B-DE82-11CF-BC0A-00AA00611E0}".

Дополнительные сведения о ведении журнала ODBC см. в элементе <odbcLogging> .

Категории сведений, регистрируемых в iis, можно определить, изменив атрибут logExtFileFlags . Значения по умолчанию: , , , UserNameClientIP, MethodServerIP, , UriQueryTimeTakenUriStem, HttpStatus, , Win32Status, ServerPortUserAgent, HttpSubStatusи .RefererTimeDate

Примечание

<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> заменяет разделы свойств ведения журнала объекта метабазы IIsWebService IIS 6.0.

Настройка

Элемент <logFile> включен в установку iis 7 и более поздних версий по умолчанию.

Инструкции

Изменение параметров ведения журнала для сайта

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку Пуск, наведите указатель на пункт Администрирование, а затем выберите Пункт Диспетчер служб IIS.
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку Пуск, а затем панель управления.
      • Дважды щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения разверните имя сервера, узел Сайты, а затем щелкните веб-сайт, на котором нужно настроить ведение журнала.

  3. На панели Главная дважды щелкните Ведение журнала.
    Снимок экрана: домашняя страница веб-сайта по умолчанию. Выделен значок ведения журнала.

  4. В области Ведение журнала выберите формат файла журнала в поле Формат , а затем введите путь к каталогу, в котором хранятся файлы журнала, в поле Каталог или нажмите кнопку Обзор... , чтобы выбрать каталог, в котором будут храниться файлы журнала.
    Снимок экрана: страница ведения журнала в диспетчере I I S Manager.

  5. Если вы решили использовать формат файла журнала W3C:

    • Щелкните Выбрать поля , чтобы выбрать типы сведений для записи.
    • В диалоговом окне Поля ведения журнала W3C выберите поля проверка для параметров, которые нужно записать в журнал, снимите флажки проверка для параметров, которые не нужно регистрировать, и нажмите кнопку ОК.
      Снимок экрана: диалоговое окно

Настройка ведения журнала трассировки событий Windows или файлов для журналов W3C

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8.1:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения разверните имя сервера, узел Сайты, а затем выберите сайт.

  3. На домашней панели сайта дважды щелкните Ведение журнала.

  4. На домашней странице Ведение журнала в поле Назначение события журнала выберите Только файл журнала, Только событие ETW или Оба файла журнала и события ETW.

    Снимок экрана: окно диспетчера I IS со страницей ведения журнала.

Настройка очистки журнала W3C по количеству записей

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8.1:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения разверните сервер и дважды щелкните редактор конфигурации.

  3. В редакторе конфигурации в разделе разверните и system.applicationHostвыберите сайты.

  4. Щелкните (Коллекция) и нажмите кнопку с многоточием.

  5. Выберите сайт, который требуется настроить, а затем разверните узел logFile.

  6. Для параметра flushByEntryCountW3Clog введите количество событий, которые необходимо сохранить в буфере перед их записью в файл журнала.

  7. В области Действие нажмите кнопку Применить.

    Снимок экрана: окно редактора коллекции. Журнал flush By Entry Count W 3 C выделен в поле Свойства.

Настройка максимальной длины строки журнала

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8.1:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения разверните сервер и дважды щелкните редактор конфигурации.

  3. В редакторе конфигурации в разделе разверните и system.applicationHostвыберите сайты.

  4. Щелкните (Коллекция) и нажмите кнопку с многоточием.

  5. Выберите сайт, который требуется настроить, а затем разверните узел logFile.

  6. Для параметра maxLogLineLength введите максимальное число байтов в одной строке файла журнала.

  7. В области Действие нажмите кнопку Применить.

    Снимок экрана: окно редактора коллекций. Максимальная длина строки журнала выделена в поле Свойства.

Конфигурация

Атрибуты

Атрибут Описание
customLogPluginClsid Необязательный строковый атрибут.

Указывает идентификатор класса COM-объектов (CLSID) или идентификаторы в порядке приоритета для пользовательских модулей.
directory Необязательный строковый атрибут.

Указывает каталог ведения журнала, в котором хранятся файл журнала и файлы поддержки, связанные с ведением журнала.

Значение по умолчанию — %SystemDrive%\inetpub\logs\LogFiles.
enabled Дополнительный логический атрибут.

Указывает, включено ли ведение журнала (true) или отключено (false) для сайта.

Примечание: Ошибки ASP и ODBC не регистрируются в файлах журнала IIS.

Значение по умолчанию — true.
flushByEntryCountW3CLog Необязательный атрибут uint.

Указывает количество событий, хранимых в буфере перед их записью в файл журнала. Меньшее число приведет к более быстрой очистке событий за счет производительности в результате большего количества операций с диском. Уменьшите это значение для устранения неполадок в режиме реального времени и увеличьте его для повышения производительности. Значение 0 указывает, что очистка будет выполняться с максимальным значением по умолчанию в 64 КБ.

Значение по умолчанию — 0.
localTimeRollover Дополнительный логический атрибут.

Указывает, создается ли новый файл журнала на основе местного времени или по времени UTC, которое ранее называлось средним по Гринвичу (GMT). Если задано значение false, создается новый файл журнала в формате UTC.

Примечание: Независимо от этого параметра метка времени для каждой записи журнала расширенного ведения журнала W3C основана на формате UTC.

Значение по умолчанию — false.
logExtFileFlags Необязательный атрибут flags.

Указывает категории сведений, которые записываются либо в файл журнала (при использовании расширенного формата файла журнала W3C), либо в источник данных ODBC во время событий ведения журнала для сайта. Атрибут logExtFileFlags может быть одним или несколькими из следующих значений. Если указано несколько значений, разделите их запятыми (,).

Значения по умолчанию: Date, Time, , ClientIPUserName, ServerIP, UriStemMethod, UriQuery, , TimeTaken, HttpStatus, Win32Status, , ServerPort, UserAgent, HttpSubStatus. Referer
Значение Описание
BytesRecv Зайдите в журнал количество байтов, полученных сервером.
BytesSent Зайдите в журнал число отправленных сервером байтов.
ClientIP Зайдите в журнал IP-адрес клиента, который сделал запрос.
ComputerName Зайдите в журнал имя сервера, на котором была создана запись файла журнала.
Cookie Зайдите в журнал содержимое полученных файлов cookie, если какое-либо содержимое существует.
Date Зайдите в журнал даты, в которую произошло действие.
Host Зайдите в журнал имя заголовка узла, если он есть.
HttpStatus Зайдите в журнал код состояния HTTP.
HttpSubStatus Зайдите в журнал код вложенного состояния ошибки HTTP. Например, для ошибки HTTP 500.18 код состояния — 500, а вложенный — 18.
Method Зайдите в журнал запрошенное действие. Например, GET, POST и т. д.
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 Дополнительный логический атрибут.

Указывает, что поле s-sitename будет содержать имя сайта (false) или идентификатор сайта (true). Если для свойства One log file per задано значение Site (стандартное значение по умолчанию), столбец s-sitename не будет отображаться в файле журнала по умолчанию, так как свойство имя файла журнала будет содержать идентификатор сайта. Если для свойства Один файл журнала на задано значение Server, столбец s-sitename будет включен в файл журнала по умолчанию.

Значение по умолчанию — True, то есть поле s-sitename содержит идентификатор сайта. Чтобы записать имя сайта в журнал, задайте для logSiteID значение False.
logTargetW3C Необязательный атрибут Flags.

Указывает, будут ли службы IIS использовать трассировку событий Windows (ETW) и (или) ведение журнала файлов для обработки зарегистрированных событий IIS. EtW обеспечивает ведение журнала в режиме реального времени и использование поставщика ETW и стандартных механизмов запросов. Ведение журнала файлов хранит данные событий в текстовых файлах, которые можно проанализировать для доступа к данным ведения журнала.

Когда СЛУЖБЫ IIS используют файлы журналов, HTTP.sys записывает данные непосредственно в текстовые файлы журнала после завершения транзакции. При использовании трассировки событий Windows HTTP.sys отправляет данные в трассировку событий Windows с помощью поставщика iislogging, а служба LOGSVC управляет данными журнала, в том числе запрашивает данные трассировки событий Windows, собирает данные непосредственно из рабочих процессов и отправляет данные в файл журнала.

Атрибут logTargetW3C может иметь следующие возможные значения. Значение по умолчанию — File. Если оба FileETW и указаны для logTargetW3C сайта в applicationHost.config, это эквивалентно выбору как файла журнала, так и события ETW для параметров файла журнала сайта в области Ведение журнала в диспетчере IIS.
Значение Описание
File Данные о событиях IIS будут храниться в текстовом файле журнала. Для обработки данных события необходимо проанализировать текстовый файл журнала. Обработка и очистка текстовых файлов журнала занимает много времени, поэтому вы не сможете обрабатывать данные событий в режиме реального времени.

Числовое значение равно 1.
ETW Вместо того, чтобы записывать данные непосредственно в текстовые файлы, СЛУЖБЫ IIS будут отправлять зарегистрированные сведения в трассировку событий Windows, универсальный механизм событий, встроенный в Windows. Вы можете управлять зарегистрированными данными с помощью стандартных средств запросов, таких как анализатор сообщений, или пользовательских средств. Трассировка событий Windows обрабатывает зарегистрированные данные в режиме реального времени и дает возможность фильтровать и просматривать данные, а также включать или отключать ведение журнала динамически. Трассировка событий Windows также добавляет подробные сведения к данным о событиях, предоставляя данные, к которым у HTTP.sys нет доступа. Дополнительные сведения см. в разделе Трассировка событий.

Числовое значение равно 2.
maxLogLineLength Необязательный атрибут uint.

Указывает максимальную длину строки в файле журнала. Это позволяет ограничить объем данных, накопленных при ведении журнала, и сэкономить место на диске, особенно при добавлении настраиваемых полей ведения журнала.

Диапазон от 2 до 65 536. Значение по умолчанию — 65536.
period Необязательный атрибут перечисления.

Указывает, как часто СЛУЖБЫ IIS создают новый файл журнала. Атрибут period может быть одним из следующих возможных значений.

Значение по умолчанию — Daily.
Значение Описание
Daily Ежедневно создавайте новый файл журнала.

Числовое значение равно 1.
Hourly Создавайте новый файл журнала ежечасно.

Числовое значение равно 4.
MaxSize Создайте новый файл журнала при достижении максимального размера. Максимальный размер указывается в атрибуте truncateSize.

Числовое значение равно 0.
Monthly Ежемесячно создавайте новый файл журнала.

Числовое значение равно 3.
Weekly Создавайте новый файл журнала еженедельно.

Числовое значение равно 2.
truncateSize Необязательный атрибут int64.

Указывает максимальный размер файла журнала (в байтах), после которого создается новый файл журнала. Это значение применимо, только если параметр MaxSize выбран для атрибута period. Минимальный размер файла — 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 для настройки этих параметров для параметра 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