Archivos de registro de un elemento <logFile> de sitio web

Información general

El elemento <logFile> del elemento <site> contiene atributos que permiten configurar el registro de un sitio en IIS 7 y versiones posteriores.

Por ejemplo, puede habilitar o deshabilitar el registro, configurar el formato del archivo de registro de IIS, especificar las categorías de información que se almacenarán en el archivo de registro y cambiar el directorio donde se almacena el archivo de registro. También puede usar el elemento <logFile> para controlar la frecuencia con la que IIS crea un archivo de registro basado en el tamaño del archivo de registro o el intervalo de tiempo y el tamaño máximo (en bytes) que puede convertirse un archivo de registro.

De manera predeterminada, IIS 7 y versiones posteriores usan el formato de archivo de registro World Wide Web Consortium (W3C). Puede cambiar esta configuración cambiando el atributo logFormat a IIS, NCSA o Personalizado.

Nota:

El registro ODBC se implementa como un módulo de registro personalizado en IIS 7 y versiones posteriores. Por ello, habilitar y configurar el registro ODBC en IIS 7 y versiones posteriores consta de dos acciones independientes:

  • Establecer los atributos de registro ODBC en el elemento <odbcLogging>. Estos atributos especifican el nombre de origen de datos del sistema (DSN), el nombre de tabla, el nombre de usuario y la contraseña para la conexión ODBC.
  • Establecer los atributos de registro personalizados correctos en el elemento <logFile>. Estos atributos deben establecer el formato de archivo de registro en "Custom" y el id. de clase de complemento de registro personalizado en "{FF16065B-DE82-11CF-BC0A-00AA006111E0}".

Para obtener más información sobre el registro ODBC, vea el elemento <odbcLogging>.

Puede definir las categorías de información que registra IIS editando el atributo logExtFileFlags. Los valores predeterminados son Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, UriQuery, TimeTaken, HttpStatus, Win32Status, ServerPort, UserAgent, HttpSubStatus y Referer.

Nota:

Si el elemento <logFile> está configurado en la sección <siteDefaults> y en la sección <site> de un sitio específico, la configuración de la sección <site> se usa para ese sitio.

IIS 8.5 permite registrar campos personalizados además del conjunto de registros estándar. El formato del archivo de registro debe ser W3C para agregar campos personalizados. Para obtener más información, vea customFields.

Compatibilidad

Versión Notas
IIS 10.0 El elemento <logFile> no se modificó en IIS 10.0.
IIS 8.5 Se ha agregado el atributo flushByEntryCountW3CLog para especificar el número de eventos que se van a almacenar en el búfer antes de vaciarlos en el archivo de registro. Se ha agregado el atributo logTargetW3C para especificar cómo se procesan los eventos IIS registrados. Se ha agregado el atributo maxLogLineLength para especificar la longitud máxima de una línea en un archivo de registro. Se ha agregado el elemento <customFields> secundario.
IIS 8.0 El atributo logSiteId se agregó para especificar el contenido del campo -sitename y la marca referer se agregó al valor predeterminado del atributo logExtFileFlags.
IIS 7.5 El elemento <logFile> no se modificó en IIS 7.5.
IIS 7.0 El elemento <logFile> del elemento <site> se introdujo en IIS 7.0.
IIS 6,0 El elemento <logFile> reemplaza las secciones de las propiedades de registro en el objeto de metabase IIsWebService de IIS 6.0.

Configuración

El elemento <logFile> se incluye en la instalación predeterminada de IIS 7.

Procedimientos

Procedimientos para editar la configuración de registro de un sitio

  1. Abra el Administrador de Internet Information Services (IIS):

    • Si usa Windows Server 2012 o Windows Server 2012 R2:

      • En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, a continuación, en Administrador de Internet Information Services (IIS).
    • Si usa Windows 8 o Windows 8.1:

      • Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
      • En Panel de control, haga clic en Herramientas administrativas y, después, haga doble clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Server 2008 o Windows Server 2008 R2:

      • En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, después, haga clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Vista o Windows 7:

      • En la barra de tareas, haga clic en Inicio y, luego, haga clic en Panel de control.
      • Haga doble clic en Herramientas administrativas y, después, haga doble clic en Administrador de Internet Information Services (IIS).
  2. En el panel Conexiones, expanda el nombre del servidor, luego la opción Sitios y, después, haga clic en el sitio web en el que quiera configurar el registro.

  3. En el panel Inicio, haga doble clic en Registro.
    Screenshot of the Default Web Site Home page. The icon for Logging is highlighted.

  4. En el panel Registro, seleccione el formato de archivo de registro en el cuadro Formato y escriba la ruta de acceso al directorio donde almacena los archivos de registro en el cuadro Directorio o bien haga clic en Examinar... para elegir el directorio en el que quiere almacenar los archivos de registro.
    Screenshot of the Logging page within I I S Manager.

  5. Si decide usar el formato de archivo de registro W3C:

    • Haga clic en Seleccionar campos para elegir los tipos de información que se van a registrar.
    • En el cuadro de diálogo Campos de registro de W3C, active las casillas de las opciones que quiere registrar, desactive las casillas de las opciones que no quiere registrar y, después, haga clic en Aceptar.
      Screenshot of the W 3 C Logging Fields dialog box.

Procedimientos para configurar el registro de archivos o ETW para registros W3C

  1. Abra el Administrador de Internet Information Services (IIS):

    • Si usa Windows Server 2012 R2:

      • En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, después, en Administrador de Internet Information Services (IIS).
    • Si usa Windows 8.1:

      • Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
      • En Panel de control, haga clic en Herramientas administrativas y, después, haga doble clic en Administrador de Internet Information Services (IIS).
  2. En el panel Conexiones, expanda el nombre del servidor, expanda Sitios y, después, seleccione un sitio.

  3. En el panel Inicio del sitio, haga doble clic en Registro.

  4. En la página principal de Registro, en Destino de eventos de registro, seleccione Solo archivo de registro, Solo evento ETW o Archivo de registro y evento ETW.

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

Procedimiento para configurar el vaciado de un registro W3C por recuento de entradas

  1. Abra el Administrador de Internet Information Services (IIS):

    • Si usa Windows Server 2012 R2:

      • En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, después, en Administrador de Internet Information Services (IIS).
    • Si usa Windows 8.1:

      • Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
      • En Panel de control, haga clic en Herramientas administrativas y, después, haga doble clic en Administrador de Internet Information Services (IIS).
  2. En el panel Conexiones, expanda el servidor y, después, haga doble clic en Editor de configuración.

  3. En el Editor de configuración, para la Sección, expanda system.applicationHost y, después, seleccione Sitios.

  4. Haga clic en (Colección) y, después, haga clic en los puntos suspensivos.

  5. Seleccione el sitio que quiere configurar y, después, expanda logFile.

  6. En flushByEntryCountW3Clog, escriba el número de eventos que se almacenarán en el búfer antes de vaciarlos en el archivo de registro.

  7. En el panel Acción, haga clic en Aplicar.

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

Procedimiento para configurar la longitud máxima de la línea de registro

  1. Abra el Administrador de Internet Information Services (IIS):

    • Si usa Windows Server 2012 R2:

      • En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, después, en Administrador de Internet Information Services (IIS).
    • Si usa Windows 8.1:

      • Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
      • En Panel de control, haga clic en Herramientas administrativas y, después, haga doble clic en Administrador de Internet Information Services (IIS).
  2. En el panel Conexiones, expanda el servidor y, después, haga doble clic en Editor de configuración.

  3. En el Editor de configuración, para la Sección, expanda system.applicationHost y, después, seleccione Sitios.

  4. Haga clic en (Colección) y, después, haga clic en los puntos suspensivos.

  5. Seleccione el sitio que quiere configurar y, después, expanda logFile.

  6. En maxLogLineLength, escriba el número máximo de bytes en una sola línea de un archivo de registro.

  7. En el panel Acción, haga clic en Aplicar.

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

Configuración

Atributos

Atributo Descripción
customLogPluginClsid Atributo de cadena opcional.

Especifica el id. de clase de objeto COM (CLSID) o los id., en orden de prioridad, de los módulos personalizados.
directory Atributo de cadena opcional.

Especifica el directorio de registro, donde se almacenan los archivos de soporte técnico relacionados con el registro y el archivo de registro.

El valor predeterminado es %SystemDrive%\inetpub\logs\LogFiles.
enabled Atributo Boolean opcional.

Especifica si, para un sitio, el registro está habilitado (true) o deshabilitado (false).

Nota: Los errores de ASP y ODBC no se registran en los archivos de registro de IIS.

El valor predeterminado es true.
flushByEntryCountW3CLog Atributo uint opcional.

Especifica el número de eventos que se van a almacenar en el búfer antes de vaciarse en el archivo de registro. Un número menor hará que los eventos se vacíen más rápidamente, a costa del rendimiento, como resultado de un mayor número de operaciones de disco. Reduzca este valor para obtener una solución de problemas más en tiempo real; auméntelo para obtener rendimiento. Un valor de 0 especifica que el vaciado se producirá en el máximo predeterminado de 64 000.

El valor predeterminado es 0.
localTimeRollover Atributo Boolean opcional.

Especifica si se crea un archivo de registro en función de la hora local o de la hora universal coordinada (UTC), que anteriormente se llamaba Hora del meridiano de Greenwich (GMT). Cuando es false, se crea un archivo de registro basado en UTC.

Nota: Independientemente de la configuración, la marca de tiempo de cada registro de registro extendido de W3C se basa en UTC.

El valor predeterminado es false.
logExtFileFlags Atributo flags opcional.

Especifica las categorías de información escritas en el archivo de registro (cuando se usa el formato de archivo de registro extendido W3C) o en el origen de datos ODBC durante los eventos de registro de un sitio. El atributo logExtFileFlags puede ser uno o varios de los valores siguientes. Si especifica más de un valor, sepárelos con una coma (,).

Los valores predeterminados son: Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, UriQuery, TimeTaken, HttpStatus, Win32Status, ServerPort, UserAgent, HttpSubStatus, Referer.
Valor Descripción
BytesRecv Registrar el número de bytes que el servidor recibió.
BytesSent Registrar el número de bytes que envió el servidor.
ClientIP Registrar la dirección IP del cliente que realizó la solicitud.
ComputerName Registrar el nombre del servidor en el que se generó la entrada del archivo de registro.
Cookie Registrar el contenido de las cookies recibidas, si existe algún contenido.
Date Registrar la fecha en la que se produjo la actividad.
Host Registrar el nombre del encabezado de host, si existe.
HttpStatus Registrar el código de estado HTTP.
HttpSubStatus Registrar el código de subestado del error HTTP. Por ejemplo, para el error HTTP 500.18, el código de estado es 500 y el código de subestado es 18.
Method Registrar la acción solicitada. Por ejemplo, GET, POST, etc.
ProtocolVersion Registrar la versión del protocolo que usó el cliente.
Referer Registrar el sitio que el usuario visitó en último lugar. Este sitio proporciona un vínculo al sitio actual.
ServerIP Registrar la dirección IP del servidor en el que se generó la entrada del archivo de registro.
ServerPort Registrar el número de puerto del servidor configurado para el sitio.
SiteName Registrar el nombre del servicio Internet y el número de instancia del sitio.
Time Registrar la hora en hora universal coordinada (UTC), en la que se produjo la actividad.
TimeTaken Registrar el período de tiempo necesario para que se complete una solicitud. El tiempo que tarda se registra en milisegundos.

Nota: La marca de tiempo de solicitud de cliente se inicializa cuando HTTP.sys recibe el primer byte, pero antes de que HTTP.sys comience a analizar la solicitud. La marca de tiempo de solicitud de cliente se detiene cuando se produce la última finalización del envío de IIS. El tiempo que tarda no refleja el tiempo en toda la red. La primera solicitud al sitio muestra un tiempo ligeramente mayor que otras solicitudes similares porque HTTP.sys abre el archivo de registro que contiene la primera solicitud.
UriQuery Registrar la consulta, si la hubiera, que el cliente estaba intentando realizar. Una consulta de identificador uniforme de recursos (URI) solo es necesaria para páginas dinámicas y normalmente consta de parámetros pasados a la dirección URL.
UriStem Registrar la información principal del identificador de recursos universal (URI), que es el destino de la acción. Por ejemplo, Default.htm.
UserAgent Registrar el tipo de explorador que usó el cliente.
UserName Registrar el nombre del usuario autenticado al que obtuvo acceso al servidor. Los usuarios anónimos se indican con un guion.
Win32Status Registrar el código de estado de Windows.
logFormat Atributo enum opcional.

Especifica el formato del archivo de registro. El atributo logFormat puede ser uno de los siguientes valores.

El valor predeterminado es W3C.
Valor Descripción
Custom Usar un formato de archivo de registro personalizado para un módulo de registro personalizado.

El valor numérico es 3.
IIS Usar el formato de archivo de registro de Microsoft IIS con el fin de registrar información sobre un sitio. HTTP.sys, administra este formato, que es un formato basado en texto ASCII fijo , lo que significa que no puede personalizar los campos que se registran. Los campos están separados por comas y la hora se registra en hora local. La lista siguiente es una lista de campos que se registran cuando se usa el formato de archivo de registro de IIS:
  • Dirección IP del cliente
  • Nombre de usuario
  • Fecha.
  • Hora
  • Servicio e instancia
  • Nombre del servidor
  • Dirección IP del servidor
  • Tiempo empleado
  • Bytes de cliente enviados
  • Bytes de servidor enviados
  • Service status code (un valor de 200 indica que la solicitud se ha satisfecho correctamente).
  • Windows status code (un valor de 0 indica que la solicitud se ha satisfecho correctamente).
  • Tipo de solicitud
  • Destino de la operación
  • Parámetros (los parámetros que se pasan a un script)
No todos los campos contendrán datos. Cuando un campo no contiene datos, aparece un guion (-) aparece como un marcador de posición. Cuando un campo contiene un carácter no imprimible, HTTP.sys lo reemplaza con un signo más (+) para conservar el formato de archivo de registro.

El valor numérico es 0.
NCSA Usar el formato de archivo de registro común de National Center for Supercomputing Applications (NCSA) con el fin de registrar información sobre un sitio. HTTP.sys, administra este formato, que es un formato basado en texto ASCII fijo , lo que significa que no puede personalizar los campos que se registran. Los campos están separados por espacios y la hora se registra en hora local con la hora universal coordinada (UTC) compensada. La lista siguiente es una lista de campos que se registran cuando se usa el formato de archivo de registro común de NCSA:
  • Dirección de host remota
  • Remote log name (este valor siempre es un guion).
  • Nombre de usuario
  • Desplazamiento de fecha, hora y UTC
  • Solicitud y versión del protocolo
  • Service status code (un valor de 200 indica que la solicitud se ha satisfecho correctamente).
  • Bytes enviados
No todos los campos contendrán datos. Cuando un campo no contiene datos, aparece un guion (-) aparece como un marcador de posición. Cuando un campo contiene un carácter no imprimible, HTTP.sys lo reemplaza con un signo más (+) para conservar el formato de archivo de registro.

El valor numérico es 1.
W3C Usar el formato de fichero de registro extendido W3C para registrar información sobre un sitio. HTTP.sys administra este formato, que es un formato basado en texto ASCII personalizable , lo que significa que usted especifica los campos que se registran. Especifique los campos que se registran en el atributo logExtFileFlags. Los campos están separados por espacios y la hora se registra en hora universal coordinada (UTC).

El valor numérico es 2.
logSiteId Atributo Boolean opcional.

Especifica que el campo s-sitename contendrá el nombre del sitio (false) o el id. de sitio (true). Si el campo Un archivo de registro por propiedad se establece en Site (el valor predeterminado listo para usar), no obtendrá la columna s-sitename en el archivo de registro de manera predeterminada, ya que la propiedad de nombre del archivo de registro contendrá el id. de sitio en su lugar. Si el campo Un archivo de registro por propiedad se establece en Server, la columna s-sitename se incluirá en el archivo de registro de manera predeterminada.

El valor predeterminado es True, lo que significa que el campo s-sitename contiene el id. de sitio. Para registrar el nombre del sitio en su lugar, establezca logSiteID en False.
logTargetW3C Atributo Flags opcional.

Especifica si IIS usará el seguimiento de eventos para Windows (ETW) o el registro de archivos a fin de procesar eventos de IIS registrados. ETW proporciona registro y uso en tiempo real de un proveedor ETW y mecanismos de consulta estándar. El registro de archivos almacena datos de eventos en archivos de texto que puede analizar para acceder a los datos de registro.

Cuando IIS usa archivos de registro, HTTP.sys registra los datos directamente en archivos de registro de texto una vez completada la transacción. Al usar ETW, HTTP.sys envía datos a ETW mediante el proveedor de iislogging y el servicio LOGSVC administra los datos de registro, incluida la consulta de ETW para los datos, la recopilación de datos directamente de los procesos de trabajo y el envío de los datos a un archivo de registro.

El atributo logTargetW3C puede tener los siguientes valores posibles. El valor predeterminado es File. Si File y ETW aparecen en logTargetW3C para el sitio en applicationHost.config, equivale a seleccionar Registro de archivo y evento ETW para la configuración del archivo de registro del sitio en el panel Registro del Administrador de IIS.
Valor Descripción
File Los datos de eventos de IIS se almacenarán en un archivo de registro de texto. Para procesar los datos del evento, debe analizar el archivo de registro basado en texto. Los archivos de registro de texto tardan tiempo en procesarse y vaciarse, por lo que no podrá procesar los datos del evento en tiempo real.

El valor numérico es 1.
ETW En lugar de registrar datos directamente en archivos de texto, IIS enviará información registrada a Seguimiento de eventos para Windows, un mecanismo de eventos genérico integrado en Windows. Puede administrar los datos registrados mediante herramientas de consulta estándar, como el Analizador de mensajes o herramientas personalizadas. ETW procesa la información registrada en tiempo real y le ofrece la capacidad de filtrar y ver los datos, así como habilitar o deshabilitar el registro dinámicamente. ETW también agrega información detallada a los datos de eventos, lo que proporciona datos a los que HTTP.sys no tiene acceso. Para más información, vea Seguimiento de eventos.

El valor numérico es 2.
maxLogLineLength Atributo uint opcional.

Especifica la longitud máxima de una línea en un archivo de registro. Esto le permite limitar la cantidad de datos acumulados mediante el registro y ahorrar espacio en disco, especialmente cuando se agregan campos de registro personalizados.

El intervalo es de 2 a 65 536. El valor predeterminado es 65536.
period Atributo enum opcional.

Especifica la frecuencia con la que IIS crea un archivo de registro. El atributo period puede ser uno de los siguientes valores posibles.

El valor predeterminado es Daily.
Valor Descripción
Daily Crear un nuevo archivo de registro diariamente.

El valor numérico es 1.
Hourly Crear un nuevo archivo de registro cada hora.

El valor numérico es 4.
MaxSize Crear un nuevo archivo de registro cuando se alcance un tamaño máximo. El tamaño máximo se especifica en el atributo truncateSize.

El valor numérico es 0.
Monthly Crear un nuevo archivo de registro mensualmente.

El valor numérico es 3.
Weekly Crear un nuevo archivo de registro semanalmente.

El valor numérico es 2.
truncateSize Atributo int64 opcional.

Especifica el tamaño máximo del archivo de registro (en bytes) después del cual se va a crear un nuevo archivo de registro. Este valor solo es aplicable cuando se elige MaxSize para el atributo period. El tamaño mínimo de archivo es 1 048 576 bytes. Si este atributo se establece en un valor inferior a 1 048 576 bytes, se supone de forma implícita que el valor predeterminado es 1 048 576 bytes.

El valor predeterminado es 20971520.

Elementos secundarios

Elemento Descripción
customFields Elemento opcional.

Especifica los valores de configuración de una colección de campos personalizados en un registro W3C.

Ejemplo de configuración

En el ejemplo de configuración siguiente se usa el atributo logExtFileFlags del elemento <logFile> a fin de especificar la configuración que IIS registra para un sitio web denominado Contoso. El atributo period hace que IIS cree un archivo de registro W3C cada hora; el atributo localTimeRollover especifica que IIS usa la hora en el servidor local para determinar cuándo crear y asignar un nombre a un nuevo archivo de registro.

<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>

Código de ejemplo

En los ejemplos siguientes se configura el registro de un sitio denominado Contoso. Cada ejemplo habilita el registro para el sitio y configura el registro de sitio a fin de generar un nuevo archivo de registro diariamente. También configuran IIS para usar la hora en el servidor local a fin de generar los nombres de archivo de registro y determinar cuándo generar nuevos archivos de registro.

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

Nota:

Debe asegurarse de establecer el parámetro de confirmación en apphost cuando use AppCmd.exe para configurar estas opciones. Esto confirma los valores de configuración en la sección de ubicación adecuada del archivo 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