Fichiers journaux d’un fichier <logFile> de site web

Vue d’ensemble

L’élément <logFile> de l’élément <site> contient des attributs qui vous permettent de configurer la journalisation d’un site sur IIS 7 et les versions ultérieures.

Par exemple, vous pouvez activer ou désactiver la journalisation, configurer le format du fichier journal IIS, spécifier les catégories d’informations à stocker dans le fichier journal et modifier le répertoire dans lequel il est stocké. Vous pouvez également utiliser l’élément <logFile> pour contrôler la fréquence à laquelle IIS crée un fichier journal en fonction de la taille ou de l’intervalle de temps du fichier journal et de la taille maximale (en octets) qu’un fichier journal peut atteindre.

Par défaut, IIS 7 et les versions ultérieures utilisent le format de fichier journal W3C (World Wide Web Consortium). Vous pouvez modifier ce paramètre en modifiant l’attribut logFormat vers IIS, NCSAou Personnalisé.

Remarque

La journalisation ODBC est implémentée en tant que module de journalisation personnalisé dans IIS 7 et les versions ultérieures. Par conséquent, l’activation et la configuration de la journalisation ODBC dans IIS 7 et les versions ultérieures se composent de deux actions distinctes :

  • Définition des attributs de journalisation ODBC dans l’élément <odbcLogging>. Ces attributs spécifient le nom de source de données système (DSN), le nom de table, le nom d’utilisateur et le mot de passe de la connexion ODBC.
  • Définition des attributs de journalisation personnalisés corrects dans l’élément <logFile>. Ces attributs doivent définir le format du fichier journal en « Personnalisé » et l’ID de classe de plug-in de journal personnalisé en « {FF16065B-DE82-11CF-BC0A-00AA006111E0} ».

Pour plus d’informations sur la journalisation ODBC, consultez l’élément <odbcLogging>.

Vous pouvez définir les catégories d’informations que IIS journalise en modifiant l’attribut logExtFileFlags. Les valeurs par défaut sont Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, UriQuery, TimeTaken, HttpStatus, Win32Status, ServerPort, UserAgent, HttpSubStatus, et Referer.

Remarque

Si l’élément <logFile> est configuré à la fois dans la section <siteDefaults> et dans la section <site> pour un site spécifique, la configuration de la section <site> est utilisée pour ce site.

IIS 8.5 vous permet de journaliser des champs personnalisés en plus de l’ensemble journalisé standard. Le fichier journal doit être au format W3C afin d’ajouter des champs personnalisés. Pour plus d’informations, consultez customFields.

Compatibilité

Version Notes
IIS 10.0 L’élément <logFile> n’a fait l’objet d’aucune modification dans IIS 10.0.
IIS 8.5 Ajout de l’attribut flushByEntryCountW3CLog pour spécifier le nombre d’événements à stocker dans la mémoire tampon avant qu’ils ne soient vidés dans le fichier journal. Ajout de l’attribut logTargetW3C pour spécifier la façon dont les événements IIS enregistrés sont traités. Ajout de l’attribut maxLogLineLength pour spécifier la longueur maximale d’une ligne dans un fichier journal. Ajout de l’élément <customFields> enfant.
IIS 8.0 L’attribut logSiteId a été ajouté pour spécifier le contenu du champ -sitename et l’indicateur referer a été ajouté à la valeur par défaut de l’attribut logExtFileFlags .
IIS 7.5 L’élément <logFile> n’a fait l’objet d’aucune modification dans IIS 7.5.
IIS 7.0 L’élément <logFile> de l’élément <site> a été introduit dans IIS 7.0.
IIS 6.0 L’élément <logFile> remplace les sections des propriétés de journalisation sur l’objet métabase IIS 6.0 IIsWebService .

Programme d’installation

L’élément <logFile> est inclus dans l’installation par défaut d’IIS 7.

Procédure

Comment modifier les paramètres de journalisation d’un site

  1. Ouvrez le Gestionnaire Internet Information Services (IIS) :

    • Si vous utilisez Windows Server 2012 ou Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows 8 ou Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d'administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Server 2008 ou Windows Server 2008 R2 :

      • Cliquez sur Démarrer, placez le curseur sur Outils d'administration, puis cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Vista ou Windows 7 :

      • Dans la barre des tâches, cliquez sur Démarrer, puis sur Panneau de configuration.
      • Double-cliquez sur Outils d'administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
  2. Dans le volet Connexions, développez le nom du serveur, développez Sites, puis cliquez sur le site Web duquel vous souhaitez configurer la journalisation.

  3. Dans le volet Accueil, double-cliquez sur Journalisation.
    Screenshot of the Default Web Site Home page. The icon for Logging is highlighted.

  4. Dans le volet Journalisation, sélectionnez le format de fichier journal dans la zone Format, puis tapez le chemin d’accès au répertoire dans lequel vous stockez les fichiers journaux dans le champ Répertoire ou cliquez sur Parcourir... pour choisir le répertoire dans lequel stocker les fichiers journaux.
    Screenshot of the Logging page within I I S Manager.

  5. Si vous choisissez d’utiliser le format de fichier journal W3C :

    • Cliquez sur Sélectionner des champs pour choisir les types d’informations à journaliser.
    • Dans la boîte de dialogue Champs de journalisation W3C, activez les cases à cocher des options que vous souhaitez journaliser, décochez les cases pour les options que vous ne souhaitez pas journaliser, puis cliquez sur OK.
      Screenshot of the W 3 C Logging Fields dialog box.

Comment configurer ETW ou journaliser des fichiers pour les journaux W3C

  1. Ouvrez le Gestionnaire Internet Information Services (IIS) :

    • Si vous utilisez Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d'administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
  2. Dans le volet Connexions, développez le nom du serveur, développez Sites, puis sélectionnez un site.

  3. Dans le volet d’accueil du site, double-cliquez sur Journalisation.

  4. Dans la page d’accueil de jJournalisation, en guise de Destination du journal d’événements, sélectionnez fichier journal uniquement, événement ETW uniquementou fichier journal et événement ETW.

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

Comment configurer le vidage d’un journal W3C en fonction du nombre d’entrées

  1. Ouvrez le Gestionnaire Internet Information Services (IIS) :

    • Si vous utilisez Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d'administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
  2. Sélectionnez le serveur dans le volet Connexions, puis double-cliquez sur Éditeur de configuration.

  3. Dans l’Éditeur de configuration, pour la Section, développez system.applicationHost, puis sélectionnez sites.

  4. Cliquez sur (Collection), puis sur les points de suspension.

  5. Sélectionnez le site que vous souhaitez configurer, puis développez logFile.

  6. Pour flushByEntryCountW3Clog, entrez le nombre d’événements à stocker dans la mémoire tampon avant qu’ils ne soient vidés dans le fichier journal.

  7. Dans le volet Actions, cliquez sur Appliquer.

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

Comment configurer la longueur maximale d’une ligne de journal

  1. Ouvrez le Gestionnaire Internet Information Services (IIS) :

    • Si vous utilisez Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d'administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
  2. Sélectionnez le serveur dans le volet Connexions, puis double-cliquez sur Éditeur de configuration.

  3. Dans l’Éditeur de configuration, pour la Section, développez system.applicationHost, puis sélectionnez sites.

  4. Cliquez sur (Collection), puis sur les points de suspension.

  5. Sélectionnez le site que vous souhaitez configurer, puis développez logFile.

  6. Pour maxLogLineLength, entrez le nombre maximal d’octets dans une seule ligne d’un fichier journal.

  7. Dans le volet Actions, cliquez sur Appliquer.

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

Configuration

Attributs

Attribut Description
customLogPluginClsid Attribut de chaîne facultatif.

Spécifie l’ID (ou les ID) de classe d’objet COM (CLSID) par ordre de priorité, pour les modules personnalisés.
directory Attribut de chaîne facultatif.

Spécifie le répertoire de journalisation, où sont stockés le fichier journal et les fichiers de prise en charge liés à la journalisation.

La valeur par défaut est %SystemDrive%\inetpub\logs\LogFiles.
enabled Attribut booléen facultatif.

Spécifie si la journalisation est activée (true) ou désactivée (false) pour un site.

Remarque : les erreurs ASP et ODBC ne sont pas journalisées dans les fichiers journaux IIS.

La valeur par défaut est true.
flushByEntryCountW3CLog Attribut uint facultatif.

Spécifie le nombre d’événements à stocker dans la mémoire tampon avant qu’ils ne soient vidés dans le fichier journal. Un nombre inférieur entraîne un vidage plus rapide des événements, ce qui diminue les performances en raison d’un plus grand nombre d’opérations sur disque. Réduisez cette valeur pour une résolution des problèmes plus en temps réel, augmentez-la pour un gain de performances. Une valeur de 0 spécifie que le vidage se produit au maximum par défaut de 64 000.

La valeur par défaut est 0.
localTimeRollover Attribut booléen facultatif.

Spécifie si un nouveau fichier journal est créé en fonction de l’heure locale ou du temps universel coordonné (UTC), précédemment appelé Heure moyenne de Greenwich (GMT). Quand la valeur est « false », un nouveau fichier journal est créé en fonction de l’heure UTC.

Remarque : quel que soit le paramètre, l’horodatage de chaque enregistrement du journal de journalisation étendu W3C est basé sur UTC.

La valeur par défaut est false.
logExtFileFlags Attribut d’indicateurs facultatifs.

Spécifie les catégories d’informations écrites dans le fichier journal (lorsque vous utilisez le format de fichier journal étendu W3C) ou dans la source de données ODBC lors de la journalisation d’un site. L’attribut logExtFileFlags peut être une ou plusieurs des valeurs suivantes. Si vous spécifiez plusieurs valeurs, séparez-les par une virgule (,).

Les valeurs par défaut sont Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, UriQuery, TimeTaken, HttpStatus, Win32Status, ServerPort, UserAgent, HttpSubStatus, Referer.
Valeur Description
BytesRecv Journalise le nombre d’octets reçus par le serveur.
BytesSent Journalise le nombre d’octets envoyés par le serveur.
ClientIP Journalise l’adresse IP du client qui a effectué la demande.
ComputerName Journalise le nom du serveur sur lequel l’entrée du fichier journal a été générée.
Cookie Journalise le contenu des cookies reçus, le cas échéant.
Date Journalise la date à laquelle l’activité s’est produite.
Host Journalise le nom d’en-tête de l’hôte, s’il en existe un.
HttpStatus Journalise le code d’état HTTP.
HttpSubStatus Journalise le code de sous-état de l’erreur HTTP. Par exemple, pour l’erreur HTTP 500.18, le code d’état est 500 et le code de sous-état est 18.
Method Journalise l’action demandée. Par exemple, GET, POST, etc.
ProtocolVersion Journalise la version du protocole utilisée par le client.
Referer Journalise le dernier site visité par l’utilisateur. Ce site a fourni un lien vers le site actuel.
ServerIP Journalise l’adresse IP du serveur sur lequel l’entrée du fichier journal a été générée.
ServerPort Journalise le numéro de port du serveur configuré pour le site.
SiteName Journalise le nom du service Internet et le numéro d’instance du site.
Time Journalise l’heure UTC à laquelle la demande a été effectuée.
TimeTaken Journalise le temps nécessaire pour la complétion d’une demande. Ce temps est enregistré en millisecondes.

Remarque : l’horodatage de la demande client est initialisé lorsque HTTP.sys reçoit le premier octet, mais avant que HTTP.sys commence à analyser la requête. L’horodatage de la demande client est arrêté lorsque la dernière saisie d’envoi IIS se termine. Le temps nécessaire ne reflète pas le temps sur le réseau. La première requête adressée au site affiche un temps légèrement plus long que d’autres demandes similaires, car HTTP.sys ouvre le fichier journal qui contient la première requête.
UriQuery Journalise la requête éventuelle que le client essayait d’exécuter. Une requête URI (Universal Resource Identifier) est nécessaire uniquement pour les pages dynamiques, et se compose généralement de paramètres passés à l’URL.
UriStem Consignez les informations de souche de l’URI (Universal Resource Identifier), qui est la cible de l’action. Par exemple, Default.htm.
UserAgent Journalise le type de navigateur utilisé par le client.
UserName Journalise le nom de l’utilisateur authentifié ayant accédé au serveur. Les utilisateurs anonymes sont indiqués par un trait d'union.
Win32Status Journalise le code d’état Windows.
logFormat Attribut d’énumération facultatif.

Spécifie le format du fichier journal. L’attribut logFormat peut être l’une des valeurs suivantes.

La valeur par défaut est W3C.
Valeur Description
Custom Utilisez un format de fichier journal personnalisé pour un module de journalisation personnalisé.

La valeur numérique est 3.
IIS Utilisez le format de fichier journal Microsoft IIS pour enregistrer des informations relatives à un site. Ce format est géré par HTTP.sys. Il s’agit d’un format textuel ASCII fixe , ce qui signifie que vous ne pouvez pas personnaliser les champs qui sont enregistrés. Les champs sont séparés par des virgules et l’heure est enregistrée en heure locale. La liste suivante répertorie les champs qui sont enregistrés lorsque vous utilisez le format de fichier journal IIS :
  • Adresse IP du client
  • Nom d'utilisateur
  • Date
  • Heure
  • Service et instance
  • Nom du serveur
  • Adresse IP du serveur
  • Temps nécessaire
  • Octets clients envoyés
  • Octets serveur envoyés
  • Service status code (La valeur 200 indique que la demande a été exécutée.)
  • Windows status code (La valeur 0 indique que la demande a été exécutée.)
  • Type de requête
  • Cible de l’opération
  • Paramètres (Les paramètres qui sont passés à un script)
Tous les champs ne contiendront pas de données. Lorsqu’un champ ne contient pas de données, un trait d’union (-) est utilisé comme espace réservé. Lorsqu’un champ contient un caractère non affichable, HTTP.sys le remplace par un signe plus (+) pour conserver le format du fichier journal.

La valeur numérique est 0.
NCSA Utilisez le format de fichier journal NCSA (National Center for Supercomputing Applications) pour enregistrer des informations relatives à un site. Ce format est géré par HTTP.sys. Il s’agit d’un format textuel ASCII fixe , ce qui signifie que vous ne pouvez pas personnaliser les champs qui sont enregistrés. Les champs sont séparés par des espaces et l’heure est enregistrée en heure locale avec le décalage par rapport au temps universel coordonné (UTC). La liste suivante répertorie les champs qui sont enregistrés lorsque vous utilisez le format de fichier journal NCSA commun :
  • Adresse de l’hôte distant
  • Remote log name (Cette valeur est toujours un trait d’union.)
  • Nom d'utilisateur
  • Date, heure et décalage UTC
  • Version de requête et de protocole
  • Service status code (La valeur 200 indique que la demande a été exécutée.)
  • Octets envoyés
Tous les champs ne contiendront pas de données. Lorsqu’un champ ne contient pas de données, un trait d’union (-) est utilisé comme espace réservé. Lorsqu’un champ contient un caractère non affichable, HTTP.sys le remplace par un signe plus (+) pour conserver le format du fichier journal.

La valeur numérique est 1.
W3C Utilisez le format de journal W3C étendu pour enregistrer des informations relatives à un site. Ce format est géré par HTTP.sys et il s’agit d’un format textuel ASCII personnalisable , ce qui signifie que vous spécifiez les champs à enregistrer. Spécifiez les champs journalisés avec l’attribut logExtFileFlags . Les champs sont séparés par des espaces et l’heure est enregistrée en temps universel coordonné (UTC).

La valeur numérique est 2.
logSiteId Attribut booléen facultatif.

Spécifie que le champ s-sitename contiendra le nom du site (false) ou l’ID de site (true). Si l’attribut « un fichier journal par propriété » est défini sur Site (la valeur par défaut), vous n’obtiendrez pas la colonne s-sitename dans le fichier journal par défaut, car la propriété « nom du fichier journal » contiendra l’ID de site à la place. Si l’attribut « un fichier journal par propriété » est défini sur Server , la colonne-s-sitename sera incluse dans le fichier journal par défaut.

La valeur par défaut est True, ce qui signifie que le champ s-sitename contient l’ID de site. Pour enregistrer le nom du site à la place, définissez logSiteID sur False.
logTargetW3C Attribut Indicateurs facultatifs.

Spécifie si IIS utilisera le suivi des événements pour Windows (ETW) et/ou la journalisation des fichiers pour le traitement des événements IIS journalisés. ETW fournit une journalisation en temps réel et l’utilisation d’un fournisseur ETW et de mécanismes d’interrogation standard. La journalisation des fichiers stocke les données d’événement dans des fichiers texte que vous pouvez analyser pour accéder aux données de journalisation.

Lorsque IIS utilise des fichiers journaux, HTTP.sys journalise les données directement dans des fichiers journaux texte une fois la transaction terminée. Lors de l’utilisation d’ETW, HTTP.sys envoie des données à ETW à l’aide du fournisseur iislogging, et le service LOGSVC gère les données de journal, notamment l’interrogation d’ETW pour les données, la collecte de données directement à partir de processus de travail et l’envoi des données à un fichier journal.

L’attribut logTargetW3C peut avoir les valeurs suivantes. La valeur par défaut est File. Si File et ETW sont répertoriés pour logTargetW3C pour le site dans applicationHost.config, cela équivaut à sélectionner à la fois le fichier journal et l’événement ETW pour les paramètres du fichier journal du site dans le volet Journalisation dans le Gestionnaire IIS.
Valeur Description
File Les données d’événement IIS sont stockées dans un fichier journal texte. Pour traiter les données d’événement, vous devez analyser le fichier journal textuel. Les fichiers journaux de texte mettent du temps à être traités et vidés, vous ne pourrez donc pas traiter les données d’événement en temps réel.

La valeur numérique est 1.
ETW Au lieu de journaliser des données directement dans des fichiers texte, IIS envoie des informations journalisées au Suivi d’événements pour Windows, un mécanisme d’événements génériques intégré à Windows. Vous pouvez gérer les données journalisées à l’aide d’outils de requête standard, tels que l’analyseur de messages ou les outils personnalisés. ETW traite les informations journalisées en temps réel et vous donne la possibilité de filtrer et d’afficher les données, et d’activer ou de désactiver la journalisation dynamiquement. ETW ajoute également des informations détaillées aux données d’événement, fournissant des données auxquelles HTTP.sys n’a pas accès. Pour plus d’informations, consultez le Suivi d’événements.

La valeur numérique est 2.
maxLogLineLength Attribut uint facultatif.

Spécifie la longueur maximale d’une ligne dans un fichier journal. Cela vous permet de limiter la quantité de données accumulées par la journalisation et d’économiser de l’espace disque, en particulier lorsque vous ajoutez des champs de journalisation personnalisés.

La plage est comprise entre 2 et 65 536. La valeur par défaut est 65536.
period Attribut d’énumération facultatif.

Spécifie la fréquence à laquelle IIS crée un fichier journal. L’attribut de période peut être l’une des valeurs possibles suivantes.

La valeur par défaut est Daily.
Valeur Description
Daily Crée un nouveau fichier journal tous les jours.

La valeur numérique est 1.
Hourly Crée un nouveau fichier journal toutes les heures.

La valeur numérique est 4.
MaxSize Crée un nouveau fichier journal quand une taille maximum est atteinte. La taille maximale est spécifiée dans l’attribut truncateSize.

La valeur numérique est 0.
Monthly Crée un fichier journal tous les mois.

La valeur numérique est 3.
Weekly Crée un nouveau fichier journal toutes les semaines.

La valeur numérique est 2.
truncateSize Attribut int64 facultatif.

Spécifie la taille maximale du fichier journal (en octets) après laquelle créer un nouveau fichier journal. Cette valeur s’applique uniquement lorsque MaxSize est choisi pour l’attribut de période. La taille de fichier minimale est 1 048 576 octets. Si cet attribut a pour valeur un nombre inférieur à 1 048 576 octets, la valeur par défaut est implicitement 1 048 576 octets.

La valeur par défaut est 20971520.

Éléments enfants

Élément Description
customFields Élément facultatif.

Spécifie les paramètres de configuration d’une collection de champs personnalisés dans un journal W3C.

Exemple Configuration

L’exemple de configuration suivant utilise l’attribut logExtFileFlags de l’élément <logFile> pour spécifier les paramètres que IIS journalise pour un site web nommé Contoso. L’attribut période entraîne la création d’un fichier journal W3C toutes les heures ; l’attribut localTimeRollover spécifie que IIS utilise l’heure sur le serveur local pour déterminer quand créer et nommer un nouveau fichier journal.

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

Exemple de code

Les exemples suivants configurent la journalisation pour un site nommé Contoso. Chaque exemple active la journalisation du site et configure la journalisation de site pour générer un nouveau fichier journal quotidiennement. Ils configurent également IIS pour utiliser l’heure du serveur local pour générer les noms des fichiers journaux et déterminer quand générer de nouveaux fichiers journaux.

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

Remarque

Vous devez veiller à définir le paramètre commit sur apphost quand vous utilisez AppCmd.exe pour configurer ces paramètres. Cela valide les paramètres de configuration dans la section d’emplacement appropriée dans le fichier 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