File di log per un file di log del sito <Web>

Panoramica

L'elemento <logFile> dell'elemento <site> contiene attributi che consentono di configurare la registrazione per un sito in IIS 7 e versioni successive.

Ad esempio, è possibile abilitare o disabilitare la registrazione, configurare il formato del file di log IIS, specificare le categorie di informazioni da archiviare nel file di log e modificare la directory in cui è archiviato il file di log. È anche possibile usare l'elemento <logFile> per controllare la frequenza con cui IIS crea un nuovo file di log in base alle dimensioni del file di log o all'intervallo di tempo e alle dimensioni massime (in byte) che un file di log può diventare.

Per impostazione predefinita, IIS 7 e versioni successive usano il formato di file di log World Wide Web Consortium (W3C). È possibile modificare questa impostazione modificando l'attributo logFormat in IIS, NCSA o Custom.

Nota

La registrazione ODBC viene implementata come modulo di registrazione personalizzato in IIS 7 e versioni successive. Di conseguenza, l'abilitazione e la configurazione della registrazione ODBC in IIS 7 e versioni successive sono costituite da due azioni separate:

  • Impostazione degli attributi di registrazione ODBC nell'elemento <odbcLogging> . Questi attributi specificano il nome dell'origine dati di sistema (DSN), il nome della tabella, il nome utente e la password per la connessione ODBC.
  • Impostazione degli attributi di registrazione personalizzati corretti nell'elemento <logFile> . Questi attributi devono impostare il formato del file di log su "Custom" e l'ID classe del plug-in del log personalizzato su "{FF16065B-DE82-11CF-BC0A-00AA006111E0}".

Per altre informazioni sulla registrazione ODBC, vedere l'elemento <odbcLogging> .

È possibile definire le categorie di informazioni che IIS registra modificando l'attributo logExtFileFlags . I valori predefiniti sono Date, Time, ClientIPUserName, , ServerIP, MethodHttpStatusTimeTakenUriQueryUriStem, ServerPortUserAgentWin32StatusHttpSubStatuse .Referer

Nota

Se l'elemento <logFile> è configurato sia <siteDefaults> nella sezione che nella <site> sezione per un sito specifico, la configurazione nella <site> sezione viene usata per tale sito.

IIS 8.5 consente di registrare campi personalizzati oltre al set registrato standard. Il formato del file di log deve essere W3C per aggiungere campi personalizzati. Per altre informazioni, vedere customFields.

Compatibilità

Versione Note
IIS 10.0 L'elemento <logFile> non è stato modificato in IIS 10.0.
IIS 8,5 Aggiunta dell'attributo flushByEntryCountW3CLog per specificare il numero di eventi da archiviare nel buffer prima che vengano scaricati nel file di log. Aggiunta dell'attributo logTargetW3C per specificare la modalità di elaborazione degli eventi IIS registrati. Aggiunta dell'attributo maxLogLineLength per specificare la lunghezza massima di una riga in un file di log. Aggiunta dell'elemento <customFields> figlio.
IIS 8,0 L'attributo logSiteId è stato aggiunto per specificare il contenuto del campo -sitename e referer il flag è stato aggiunto al valore predefinito dell'attributo logExtFileFlags .
IIS 7,5 L'elemento <logFile> non è stato modificato in IIS 7.5.
IIS 7.0 L'elemento <logFile> dell'elemento <site> è stato introdotto in IIS 7.0.
IIS 6.0 L'elemento <logFile> sostituisce le sezioni delle proprietà di registrazione nell'oggetto metabase IIS 6.0 IIsWebService .

Installazione

L'elemento <logFile> è incluso nell'installazione predefinita di IIS 7 e versioni successive.

Procedure

Come modificare le impostazioni di registrazione per un sito

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 o Windows Server 2012 R2:

      • Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows 8 o Windows 8.1:

      • Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
      • Fare clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Server 2008 o Windows Server 2008 R2:

      • Sulla barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Vista o Windows 7:

      • Sulla barra delle applicazioni fare clic su Start e quindi su Pannello di controllo.
      • Fare doppio clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni espandere il nome del server, espandere Siti e quindi fare clic sul sito Web in cui si vuole configurare la registrazione.

  3. Nel riquadro Home fare doppio clic su Registrazione.
    Screenshot della home page del sito Web predefinito. L'icona di Registrazione è evidenziata.

  4. Nel riquadro Registrazione selezionare il formato del file di log nella casella Formato , quindi digitare il percorso della directory in cui archiviare i file di log nella casella Directory o fare clic su Sfoglia per scegliere la directory in cui archiviare i file di log.
    Screenshot della pagina Registrazione all'interno di I S Manager.

  5. Se si sceglie di usare il formato di file di log W3C:

    • Fare clic su Seleziona campi per scegliere i tipi di informazioni da registrare.
    • Nella finestra di dialogo Campi registrazione W3C selezionare le caselle di controllo per le opzioni che si desidera registrare, deselezionare le caselle di controllo per le opzioni che non si desidera registrare e quindi fare clic su OK.
      Screenshot della finestra di dialogo Campi di registrazione W 3 C.

Come configurare la registrazione di file o ETW per i log W3C

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 R2:

      • Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows 8.1:

      • Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
      • Fare clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni espandere il nome del server, espandere Siti e quindi selezionare un sito.

  3. Nel riquadro home del sito fare doppio clic su Registrazione.

  4. Nella home page Registrazione selezionare Solo file di log, solo evento ETW o File di log e evento ETW.

    Screenshot della finestra I S Manager che mostra la pagina Registrazione.

Come configurare lo scaricamento di un log W3C in base al numero di voci

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 R2:

      • Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows 8.1:

      • Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
      • Fare clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni espandere il server e quindi fare doppio clic su Editor di configurazione.

  3. Nell'Editor di configurazione, per Sezione espandere system.applicationHoste quindi selezionare siti.

  4. Fare clic su (Raccolta) e quindi sui puntini di sospensione.

  5. Selezionare il sito da configurare e quindi espandere logFile.

  6. Per flushByEntryCountW3Clog, immettere il numero di eventi da archiviare nel buffer prima che vengano scaricati nel file di log.

  7. Nel riquadro Azione fare clic su Applica.

    Screenshot della finestra Editor raccolta. Flush By Entry Count W 3 C Log è evidenziato nel campo Proprietà.

Come configurare la lunghezza massima della riga del log

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 R2:

      • Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows 8.1:

      • Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
      • Fare clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni espandere il server e quindi fare doppio clic su Editor di configurazione.

  3. Nell'Editor di configurazione, per Sezione espandere system.applicationHoste quindi selezionare siti.

  4. Fare clic su (Raccolta) e quindi sui puntini di sospensione.

  5. Selezionare il sito da configurare e quindi espandere logFile.

  6. Per maxLogLineLength immettere il numero massimo di byte in una singola riga di un file di log.

  7. Nel riquadro Azione fare clic su Applica.

    Screenshot della finestra Editor raccolta. La lunghezza massima della riga del log è evidenziata nel campo Proprietà.

Configurazione

Attributi

Attributo Descrizione
customLogPluginClsid Attributo stringa facoltativo.

Specifica l'ID classe di oggetti COM (CLSID) o GLI ID, in ordine di precedenza, per i moduli personalizzati.
directory Attributo stringa facoltativo.

Specifica la directory di registrazione in cui vengono archiviati il file di log e i file di supporto correlati alla registrazione.

Il valore predefinito è %SystemDrive%\inetpub\logs\LogFiles.
enabled Attributo booleano facoltativo.

Specifica se la registrazione è abilitata (true) o disabilitata (false) per un sito.

Nota: Gli errori ASP e ODBC non vengono registrati nei file di log iis.

Il valore predefinito è true.
flushByEntryCountW3CLog Attributo uint facoltativo.

Specifica il numero di eventi da archiviare nel buffer prima che vengano scaricati nel file di log. Un numero inferiore causerà lo scaricamento più rapido degli eventi, a costo delle prestazioni in seguito a un numero maggiore di operazioni su disco. Ridurre questo valore per la risoluzione dei problemi in tempo reale, aumentarne le prestazioni. Il valore 0 specifica che lo scaricamento si verificherà al massimo 64k predefinito.

Il valore predefinito è 0.
localTimeRollover Attributo booleano facoltativo.

Specifica se viene creato un nuovo file di log in base all'ora locale o all'ora UTC (Coordinated Universal Time), precedentemente denominata Ora di Greenwich (GMT). Se false, viene creato un nuovo file di log in base all'ora UTC.

Nota: Indipendentemente dall'impostazione, il timestamp per ogni record di log di registrazione estesa W3C è basato su UTC.

Il valore predefinito è false.
logExtFileFlags Attributo flag facoltativo.

Specifica le categorie di informazioni scritte nel file di log (quando si utilizza il formato di file di log esteso W3C) o nell'origine dati ODBC durante la registrazione degli eventi per un sito. L'attributo logExtFileFlags può essere uno o più dei valori seguenti. Se si specificano più valori, separarli con una virgola (,).

I valori predefiniti sono Date, , ClientIPTimeUserName, , ServerIP, Method, UriStem, UriQueryTimeTakenUserAgentHttpStatusRefererWin32StatusServerPortHttpSubStatus.
Valore Descrizione
BytesRecv Registrare il numero di byte ricevuti dal server.
BytesSent Registrare il numero di byte inviati dal server.
ClientIP Registrare l'indirizzo IP del client che ha effettuato la richiesta.
ComputerName Registrare il nome del server in cui è stata generata la voce del file di log.
Cookie Registrare il contenuto dei cookie ricevuti, se esiste un contenuto.
Date Registrare la data in cui si è verificata l'attività.
Host Registrare il nome dell'intestazione host, se presente.
HttpStatus Registrare il codice di stato HTTP.
HttpSubStatus Registrare il codice di stato secondario dell'errore HTTP. Ad esempio, per l'errore HTTP 500.18, il codice di stato è 500 e il codice di stato secondario è 18.
Method Registrare l'azione richiesta. Ad esempio , GET, POST e così via.
ProtocolVersion Registrare la versione del protocollo usata dal client.
Referer Registrare il sito visitato per l'ultima volta dall'utente. Questo sito fornisce un collegamento al sito corrente.
ServerIP Registrare l'indirizzo IP del server in cui è stata generata la voce del file di log.
ServerPort Registrare il numero di porta del server configurato per il sito.
SiteName Registrare il nome del servizio Internet e il numero di istanza per il sito.
Time Registrare l'ora in Utc (Coordinated Universal Time), in corrispondenza della quale si è verificata l'attività.
TimeTaken Registrare l'intervallo di tempo impiegato per il completamento di una richiesta. Il tempo impiegato viene registrato in millisecondi.

Nota: il timestamp della richiesta client viene inizializzato quando HTTP.sys riceve il primo byte, ma prima che HTTP.sys inizi a analizzare la richiesta. Il timestamp della richiesta client viene arrestato quando si verifica l'ultimo completamento dell'invio IIS. Il tempo impiegato non riflette il tempo nella rete. La prima richiesta al sito mostra un tempo leggermente più lungo rispetto ad altre richieste simili perché HTTP.sys apre il file di log che contiene la prima richiesta.
UriQuery Registrare la query, se presente, che il client stava tentando di eseguire. Una query URI (Universal Resource Identifier) è necessaria solo per le pagine dinamiche e in genere è costituita da parametri passati all'URL.
UriStem Registrare le informazioni staminali dell'URI (Universal Resource Identifier), ovvero la destinazione dell'azione. Ad esempio, Default.htm.
UserAgent Registrare il tipo di browser usato dal client.
UserName Registrare il nome dell'utente autenticato che ha eseguito l'accesso al server. Gli utenti anonimi sono indicati da un trattino.
Win32Status Registrare il codice di stato di Windows.
logFormat Attributo di enumerazione facoltativo.

Specifica il formato del file di log. L'attributo logFormat può essere uno dei valori seguenti.

Il valore predefinito è W3C.
Valore Descrizione
Custom Usare un formato di file di log personalizzato per un modulo di registrazione personalizzato.

Il valore numerico è 3.
IIS Utilizzare il formato di file di log di Microsoft IIS per registrare informazioni su un sito. Questo formato è gestito da HTTP.sys ed è basato su testo ASCII fisso, ovvero non consente di personalizzare i campi da registrare. I campi sono separati da virgole e l'ora viene registrata in formato locale. L'elenco seguente include i campi che vengono registrati quando si usa il formato di file di log di IIS:
  • Indirizzo IP client
  • Nome utente
  • Data
  • Tempo
  • Servizio e istanza
  • Nome server
  • Indirizzo IP del server
  • Tempo impiegato
  • Byte client inviati
  • Byte server inviati
  • Service status code (il valore 200 indica che la richiesta è stata eseguita correttamente)
  • Windows status code (il valore 0 indica che la richiesta è stata eseguita correttamente)
  • Tipo di richiesta
  • Destinazione dell'operazione
  • Parametri (i parametri passati a uno script)
Non tutti i campi conterranno dati. Quando un campo non contiene dati, viene visualizzato un trattino (-) come segnaposto. Quando un campo contiene un carattere non stampabile, HTTP.sys lo sostituisce con un segno più (+) per mantenere il formato del file di log.

Il valore numerico è 0.
NCSA Usare il formato di file di log comune del Centro nazionale per le applicazioni di supercomputazione (NCSA) per registrare informazioni su un sito. Questo formato è gestito da HTTP.sys ed è basato su testo ASCII fisso, ovvero non consente di personalizzare i campi da registrare. I campi sono separati da spazi e l'ora viene registrata nel formato locale con differenza UTC. L'elenco seguente include i campi che vengono registrati quando si usa il formato di file di log comune NCSA:
  • Indirizzo host remoto
  • Remote log name (questo valore è sempre un trattino)
  • Nome utente
  • Offset di data, ora e UTC
  • Versione di richiesta e protocollo
  • Service status code (il valore 200 indica che la richiesta è stata eseguita correttamente)
  • Byte inviati
Non tutti i campi conterranno dati. Quando un campo non contiene dati, viene visualizzato un trattino (-) come segnaposto. Quando un campo contiene un carattere non stampabile, HTTP.sys lo sostituisce con un segno più (+) per mantenere il formato del file di log.

Il valore numerico è 1.
W3C Usare il formato di file di log esteso W3C per registrare informazioni su un sito. Questo formato è gestito da HTTP.sys ed è basato su testo ASCII personalizzabile, ovvero consente di specificare i campi da registrare. Specificare i campi registrati nell'attributo logExtFileFlags . I campi sono separati da spazi e l'ora viene registrata nel formato UTC.

Il valore numerico è 2.
logSiteId Attributo booleano facoltativo.

Specifica che il campo s-sitename conterrà il nome del sito (false) o l'ID del sito (true). Se il file di log uno per ogni proprietà è impostato su Site (impostazione predefinita predefinita), non si otterrà la colonna s-sitename nel file di log per impostazione predefinita, perché la proprietà nome file di log conterrà invece l'ID del sito. Se il file di log uno per proprietà è impostato su Server, la colonna nome-sito-s verrà inclusa nel file di log per impostazione predefinita.

Il valore predefinito è True, significa che il campo s-sitename contiene l'ID sito. Per registrare invece il nome del sito, impostare logSiteID su False.
logTargetW3C Attributo Flag facoltativo.

Specifica se IIS userà Traccia eventi per Windows (ETW) e/o la registrazione dei file per l'elaborazione degli eventi IIS registrati. ETW fornisce la registrazione in tempo reale e l'uso di un provider ETW e dei meccanismi di query standard. La registrazione file archivia i dati degli eventi nei file di testo che è possibile analizzare per accedere ai dati di registrazione.

Quando IIS usa i file di log, HTTP.sys registra i dati direttamente nei file di log di testo dopo il completamento della transazione. Quando si usa ETW, HTTP.sys invia i dati in ETW usando il provider iislogging e il servizio LOGSVC gestisce i dati di log, inclusa l'esecuzione di query su ETW per i dati, la raccolta dei dati direttamente dai processi di lavoro e l'invio dei dati a un file di log.

L'attributo logTargetW3C può avere i valori possibili seguenti. Il valore predefinito è File. File Se entrambi e ETW sono elencati per logTargetW3C il sito in applicationHost.config, equivale a selezionare sia il file di log che l'evento ETW per le impostazioni del file di log del sito nel riquadro Registrazione in Gestione IIS.
Valore Descrizione
File I dati dell'evento IIS verranno archiviati in un file di log di testo. Per elaborare i dati dell'evento, è necessario analizzare il file di log basato su testo. I file di log di testo richiedono tempo per elaborare e scaricare, quindi non sarà possibile elaborare i dati dell'evento in tempo reale.

Il valore numerico è 1.
ETW Anziché registrare i dati direttamente nei file di testo, IIS invierà informazioni registrate a Traccia eventi per Windows, un meccanismo di evento generico integrato in Windows. È possibile gestire i dati registrati usando strumenti di query standard, ad esempio Analizzatore messaggi o strumenti personalizzati. ETW elabora le informazioni registrate in tempo reale e offre la possibilità di filtrare e visualizzare i dati e di abilitare o disabilitare la registrazione in modo dinamico. ETW aggiunge anche informazioni dettagliate ai dati degli eventi, fornendo dati che HTTP.sys non hanno accesso. Per altre informazioni, vedere Traccia eventi.

Il valore numerico è 2.
maxLogLineLength Attributo uint facoltativo.

Specifica la lunghezza massima di una riga in un file di log. In questo modo è possibile limitare la quantità di dati accumulati tramite la registrazione e risparmiare spazio su disco, soprattutto quando si aggiungono campi di registrazione personalizzati.

L'intervallo è compreso tra 2 e 65.536. Il valore predefinito è 65536.
period Attributo enumerazione facoltativo.

Specifica la frequenza con cui IIS crea un nuovo file di log. L'attributo period può essere uno dei valori possibili seguenti.

Il valore predefinito è Daily.
Valore Descrizione
Daily Creare un nuovo file di log ogni giorno.

Il valore numerico è 1.
Hourly Creare un nuovo file di log oraria.

Il valore numerico è 4.
MaxSize Creare un nuovo file di log quando viene raggiunta una dimensione massima. La dimensione massima viene specificata nell'attributo truncateSize.

Il valore numerico è 0.
Monthly Creare un nuovo file di log mensile.

Il valore numerico è 3.
Weekly Creare un nuovo file di log settimanalmente.

Il valore numerico è 2.
truncateSize Attributo facoltativo int64.

Specifica la dimensione massima del file di log (in byte) dopo la quale creare un nuovo file di log. Questo valore è applicabile solo quando MaxSize viene scelto per l'attributo period. La dimensione minima del file è pari a 1.048.576 byte. Se questo attributo è impostato su un valore minore di 1.048.576 byte, il valore predefinito viene assunto in modo implicito come 1.048.576 byte.

Il valore predefinito è 20971520.

Elementi figlio

Elemento Descrizione
customFields Elemento facoltativo.

Specifica le impostazioni di configurazione per una raccolta di campi personalizzati in un log W3C.

Esempio di configurazione

Nell'esempio di configurazione seguente viene usato l'attributo logExtFileFlags dell'elemento <logFile> per specificare le impostazioni che IIS registra per un sito Web denominato Contoso. L'attributo periodo causa la creazione di un nuovo file di log W3C ogni ora; l'attributo localTimeRollover specifica che IIS usa il tempo nel server locale per determinare quando creare e assegnare un nome a un nuovo file di log.

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

Codice di esempio

Gli esempi seguenti configurano la registrazione per un sito denominato Contoso. Ogni esempio abilita la registrazione per il sito e configura la registrazione del sito per generare un nuovo file di log su base giornaliera. Configura inoltre IIS per usare il tempo nel server locale per generare i nomi dei file di log e determinare quando generare nuovi file di log.

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

È necessario assicurarsi di impostare il parametro commit su apphost quando si usa AppCmd.exe per configurare queste impostazioni. Questa operazione esegue il commit delle impostazioni di configurazione nella sezione percorso appropriata nel file di 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