Arquivos de log para um <logFile> de site

Visão geral

O elemento <logFile> do elemento <site> contém atributos que permitem configurar o registro em log para um site no IIS 7 e posterior.

Por exemplo, você pode habilitar ou desabilitar o registro em log, configurar o formato do arquivo de log do IIS, especificar as categorias de informações a serem armazenadas no arquivo de log e alterar o diretório em que o arquivo de log está armazenado. Você também pode usar o elemento <logFile> para controlar a frequência com que o IIS cria um novo arquivo de log com base no tamanho do arquivo de log ou no intervalo de tempo e no tamanho máximo (em bytes) que um arquivo de log pode obter.

Por padrão, o IIS 7 e posterior usa o formato de arquivo de log W3C (World Wide Web Consortium). Você pode alterar essa configuração modificando o atributo logFormat para IIS, NCSA ou Custom.

Observação

O registro em log do ODBC é implementado como um módulo de registro em log personalizado no IIS 7 e posterior. Como resultado, habilitar e configurar o registro em log do ODBC no IIS 7 e posterior consiste em duas ações separadas:

  • Definindo os atributos de registro em log do ODBC no elemento <odbcLogging>. Esses atributos especificam o DSN (Nome da Fonte de Dados do Sistema), o nome da tabela, o nome de usuário e a senha para conexão ODBC.
  • Definindo os atributos de registro em log personalizados corretos no elemento <logFile>. Esses atributos devem definir o formato de arquivo de log como "Personalizado" e a ID da classe de plug-in de log personalizada como "{FF16065B-DE82-11CF-BC0A-00AA006111E0}".

Para obter mais informações sobre o registro em log do ODBC, consulte o elemento <odbcLogging>.

Você pode definir as categorias de informações que o IIS registra editando o atributo logExtFileFlags. Os valores padrão são Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, UriQuery, TimeTaken, HttpStatus, Win32Status, ServerPort, UserAgent, HttpSubStatus e Referer.

Observação

Se o elemento <logFile> estiver configurado na seção <siteDefaults> e na seção <site> de um site específico, a configuração na seção <site> será usada para esse site.

Os IIS 8.5 permitem que você registre campos personalizados além do conjunto de logs padrão. O formato do arquivo de log deve ser W3C para adicionar campos personalizados. Para obter mais informações, consulte customFields.

Compatibilidade

Versão Observações
IIS 10.0 O elemento <logFile> não foi modificado no IIS 10.0.
IIS 8.5 Adicionado o atributo flushByEntryCountW3CLog para especificar o número de eventos a serem armazenados no buffer antes de serem liberados para o arquivo de log. Adicionado o atributo logTargetW3C para especificar como os eventos do IIS registrados são processados. Adicionado o atributo maxLogLineLength para especificar o comprimento máximo de uma linha em um arquivo de log. Adicionado o elemento filho <customFields>.
IIS 8.0 O atributo logSiteId foi adicionado para especificar o conteúdo do campo -sitename e o sinalizador referer foi adicionado ao valor padrão do atributo logExtFileFlags.
IIS 7.5 O elemento <logFile> não foi modificado no IIS 7.5.
IIS 7.0 O elemento <logFile> do elemento <site> foi introduzido no IIS 7.0.
IIS 6,0 O elemento <logFile> substitui seções das propriedades de registro em log no objeto de metabase IIsWebService do IIS 6.0.

Instalação

O elemento <logFile> está incluído na instalação padrão do IIS 7 e versões posteriores.

Instruções

Como editar configurações de log para um site

  1. Abra o Gerenciador dos Serviços de Informações da Internet (IIS):

    • Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows 8 ou Windows 8.1:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:

      • Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows Vista ou Windows 7:

      • Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
      • Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, expanda o nome do servidor e Sites e, em seguida, clique no site no qual deseja configurar o registro em log.

  3. No painel Página Inicial, clique duas vezes em Registro em Log.
    Screenshot of the Default Web Site Home page. The icon for Logging is highlighted.

  4. No painel Registro em Log, selecione o formato de arquivo de log na caixa Formatar e, em seguida, digite o caminho para o diretório em que você armazena os arquivos de log na caixa Diretório ou clique em Procurar... para escolher o diretório no qual armazenar os arquivos de log.
    Screenshot of the Logging page within I I S Manager.

  5. Se você optar por usar o formato de arquivo de log do W3C:

    • Clique em Selecionar Campos para escolher os tipos de informações a serem registradas.
    • Na caixa de diálogo Campos de Registro em Log do W3C, marque as caixas de seleção para as opções que deseja registrar, desmarque as caixas de seleção para as opções que não deseja registrar e clique em OK.
      Screenshot of the W 3 C Logging Fields dialog box.

Como configurar o ETW ou o registro em log de arquivos para logs do W3C

  1. Abra o Gerenciador dos Serviços de Informações da Internet (IIS):

    • Se você estiver usando o Windows Server 2012 R2:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows 8.1:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, expanda o nome do servidor e Sites e, em seguida, selecione um site.

  3. Na página inicial do site, clique duas vezes em Registro em Log.

  4. Na página inicial do Registro em Log, para o Destino do Evento de Log, selecione Somente arquivo de log, Somente evento ETW ou Arquivo de log e Evento ETW.

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

Como configurar a liberação de um log do W3C por contagem de entradas

  1. Abra o Gerenciador dos Serviços de Informações da Internet (IIS):

    • Se você estiver usando o Windows Server 2012 R2:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows 8.1:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, expanda o servidor e clique duas vezes no Editor de Configuração.

  3. No Editor de Configuração, para a Seção, expanda system.applicationHost e selecione sites.

  4. Clique em (Coleção) e, em seguida, nas reticências.

  5. Selecione o site que deseja configurar e expanda logFile.

  6. Para flushByEntryCountW3Clog, insira o número de eventos a serem armazenados no buffer antes de serem liberados para o arquivo de log.

  7. No painel Ação, clique em Aplicar.

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

Como configurar o comprimento máximo da linha de log

  1. Abra o Gerenciador dos Serviços de Informações da Internet (IIS):

    • Se você estiver usando o Windows Server 2012 R2:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows 8.1:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, expanda o servidor e clique duas vezes no Editor de Configuração.

  3. No Editor de Configuração, para a Seção, expanda system.applicationHost e selecione sites.

  4. Clique em (Coleção) e, em seguida, nas reticências.

  5. Selecione o site que deseja configurar e expanda logFile.

  6. Para maxLogLineLength, insira o número máximo de bytes em uma única linha de um arquivo de log.

  7. No painel Ação, clique em Aplicar.

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

Configuração

Atributos

Atributo Descrição
customLogPluginClsid Atributo de cadeia de caracteres opcional.

Especifica a ID da classe de objeto COM (CLSID) ou IDs, em ordem de precedência, para módulos personalizados.
directory Atributo de cadeia de caracteres opcional.

Especifica o diretório de registro em log, no qual o arquivo de log e os arquivos de suporte relacionados ao registro em log são armazenados.

O valor padrão é %SystemDrive%\inetpub\logs\LogFiles.
enabled Atributo booliano opcional.

Especifica se o registro em log está habilitado (true) ou desabilitado (false) para um site.

Observação: os erros do ASP e do ODBC não são registrados nos arquivos de log do IIS.

O valor padrão é true.
flushByEntryCountW3CLog Atributo uint opcional.

Especifica o número de eventos a serem armazenados no buffer antes de serem liberados para o arquivo de log. Um número menor fará com que os eventos sejam liberados mais rapidamente, ao custo do desempenho, como resultado de um maior número de operações de disco. Reduza esse valor para mais soluções de problemas em tempo real, aumente-o para o desempenho. Um valor de 0 especifica que a liberação ocorrerá no máximo padrão de 64k.

O valor padrão é 0.
localTimeRollover Atributo booliano opcional.

Especifica se um novo arquivo de log é criado com base na hora local ou no UTC (Tempo Universal Coordenado), que anteriormente era chamado de GMT (Horário do Meridiano de Greenwich). Quando false, um novo arquivo de log é criado com base no UTC.

Observação: independentemente da configuração, o carimbo de data/hora de cada registro de log estendido do W3C é baseado em UTC.

O valor padrão é false.
logExtFileFlags Atributo de sinalizadores opcionais.

Especifica as categorias de informações que são gravadas no arquivo de log (quando você usa o formato de arquivo de log estendido W3C) ou para a fonte de dados ODBC durante eventos de registro em log para um site. O atributo logExtFileFlags pode ser um ou mais dos valores a seguir. Se você especificar mais de um valor, separe-os com uma vírgula (,).

Os valores padrão são Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, UriQuery, TimeTaken, HttpStatus, Win32Status, ServerPort, UserAgent, HttpSubStatus, Referer.
Valor Descrição
BytesRecv Registra o número de bytes que o servidor recebeu.
BytesSent Registre o número de bytes que o servidor enviou.
ClientIP Registre o endereço IP do cliente que fez a solicitação.
ComputerName Registre o nome do servidor no qual a entrada do arquivo de log foi gerada.
Cookie Registre o conteúdo dos cookies recebidos, se houver algum conteúdo.
Date Registre a data em que a atividade ocorreu.
Host Registre o nome do cabeçalho do host, se houver.
HttpStatus Registre o código de status HTTP.
HttpSubStatus Registre o código de sub-status do erro HTTP. Por exemplo, para o erro HTTP 500.18, o código de status é 500 e o código de sub-status é 18.
Method Registre a ação solicitada. Por exemplo, GET, POST etc.
ProtocolVersion Registre a versão do protocolo usada pelo cliente.
Referer Registre o último site que o usuário visitou. Esse site fornece um link para o site atual.
ServerIP Registre o endereço IP do servidor no qual a entrada do arquivo de log foi gerada.
ServerPort Registre o número da porta do servidor que está configurado para o site.
SiteName Registre o nome do serviço de Internet e o número da instância do site.
Time Registre a hora, em UTC (Tempo Universal Coordenado), na qual atividade ocorreu.
TimeTaken Registre o tempo necessário para que uma solicitação seja concluída. O tempo gasto é registrado em milissegundos.

Observação: o carimbo de data/hora de solicitação do cliente é inicializado quando o HTTP.sys recebe o primeiro byte, mas antes que o HTTP.sys comece a analisar a solicitação. O carimbo de data/hora de solicitação do cliente é interrompido quando ocorre a última conclusão de envio do IIS. O tempo gasto não reflete o tempo em toda a rede. A primeira solicitação para o site mostra um tempo um pouco maior do que outras solicitações semelhantes porque o HTTP.sys abre o arquivo de log que contém a primeira solicitação.
UriQuery Registre a consulta, se houver, que o cliente estava tentando executar. Uma consulta do URI (Identificador de Recurso Universal) é necessária apenas para páginas dinâmicas e, geralmente, consiste em parâmetros passados para o URL.
UriStem Registre as informações de tronco do URI (Identificador de Recurso Universal), que é o destino da ação. Por exemplo, Default.htm.
UserAgent Registre o tipo de navegador usado pelo cliente.
UserName Registre o nome do usuário autenticado que acessou seu servidor. Os usuários anônimos são indicados por um hífen.
Win32Status Registre o código de status do Windows.
logFormat Atributo de enumeração opcional.

Especifica o formato do arquivo de log. O atributo logFormat pode ser um dos seguintes valores.

O valor padrão é W3C.
Valor Descrição
Custom Use um formato de arquivo de log personalizado para um módulo de registro em log personalizado.

O valor numérico é 3.
IIS Use o formato de arquivo de log Microsoft IIS para registrar informações sobre um site. Esse formato é manipulado pelo HTTP.sys e consiste em um formato ASCII fixo baseado em texto, o que significa que você não pode personalizar os campos registrados. Os campos são separados por vírgulas e a hora é registrada conforme a hora local. A lista a seguir é uma lista de campos registrados quando você usa o formato de arquivo de log do IIS:
  • Endereço IP do Cliente
  • Nome do usuário
  • Data
  • Hora
  • Serviço e instância
  • Nome do servidor
  • Endereço IP do Servidor
  • Tempo decorrido
  • Bytes de cliente enviados
  • Bytes de servidor enviados
  • Service status code (Um valor de 200 indica que a solicitação foi atendida com êxito.)
  • Windows status code (Um valor de 0 indica que a solicitação foi atendida com êxito.)
  • Tipo de solicitação
  • Destino da operação
  • Parâmetros (os parâmetros que são passados para um script.)
Nem todos os campos conterão dados. Quando um campo não contiver dados, um hífen (-) aparecerá como um espaço reservado. Quando um campo contém um caractere não imprimível, o HTTP.sys o substitui por um sinal de adição (+) para preservar o formato do arquivo de log.

O valor numérico é 0.
NCSA Use o formato de arquivo de log comum NCSA (National Center for Supercomputing Applications) para registrar informações sobre um site. Esse formato é manipulado pelo HTTP.sys e consiste em um formato ASCII fixo baseado em texto, o que significa que você não pode personalizar os campos registrados. Os campos são separados por espaços e a hora é registrada conforme a hora local com a diferença UTC (Tempo Universal Coordenado). A lista a seguir é uma lista de campos registrados quando você usa o formato de arquivo de log comum do NCSA:
  • Endereço do host remoto
  • Remote log name (Esse valor é sempre um hífen.)
  • Nome do usuário
  • Deslocamento de data, hora e UTC
  • Versão da solicitação e do protocolo
  • Service status code (Um valor de 200 indica que a solicitação foi atendida com êxito.)
  • Bytes enviados
Nem todos os campos conterão dados. Quando um campo não contiver dados, um hífen (-) aparecerá como um espaço reservado. Quando um campo contém um caractere não imprimível, o HTTP.sys o substitui por um sinal de adição (+) para preservar o formato do arquivo de log.

O valor numérico é 1.
W3C Use o formato do arquivo de log estendido do W3C para registrar informações sobre um site. Esse formato é manipulado pelo HTTP.sys e consiste em um formato ASCII personalizável baseado em texto, o que significa que você pode especificar os campos registrados. Especifique os campos registrados no atributo logExtFileFlags. Os campos são separados por espaços e a hora sempre será registrada em UTC (Tempo Universal Coordenado).

O valor numérico é 2.
logSiteId Atributo booliano opcional.

Especifica que o campo s-sitename conterá o nome do site (false) ou a ID do site (true). Se o arquivo de log One por propriedade estiver definido como Site (o padrão pronto para uso), você não obterá a coluna s-sitename no arquivo de log por padrão, pois a propriedade de nome do arquivo de log conterá a ID do site. Se o arquivo de log One por propriedade for definido como Server, a coluna-s-sitename será incluída no arquivo de log por padrão.

O valor padrão é True, o que significa que o campo s-sitename contém a ID do site. Para registrar o nome do site em vez disso, defina logSiteID como False.
logTargetW3C Atributo de sinalizadores opcionais.

Especifica se o IIS usará o ETW (Rastreamento de Eventos para Windows) e/ou o registro em log de arquivos para processar eventos do IIS registrados. O ETW fornece registro em log em tempo real e o uso de um provedor ETW e mecanismos de consulta padrão. O registro em log de arquivos armazena dados de evento em arquivos de texto que você pode analisar para acessar dados de registro em log.

Quando o IIS usa arquivos de log, o HTTP.sys registra dados diretamente em arquivos de log de texto após a conclusão da transação. Ao usar o ETW, o HTTP.sys envia dados para o ETW usando o provedor iislogging, e o serviço LOGSVC gerencia os dados de log, incluindo consultar o ETW para obter dados, coletar dados diretamente de processos de trabalho e enviar os dados para um arquivo de log.

O atributo logTargetW3C pode ter os seguintes possíveis valores. O valor padrão é File. Se tanto File como ETW estiverem listados para logTargetW3C o site em applicationHost.config, isso equivale a selecionar o Arquivo de log e Evento ETW para as configurações de arquivo de log do site no painel Registro em Log no gerenciador do IIS.
Valor Descrição
File Os dados de evento do IIS serão armazenados em um arquivo de log de texto. Para processar os dados do evento, você deve analisar o arquivo de log baseado em texto. Os arquivos de log de texto levam tempo para ser processados e liberados e, portanto, você não poderá processar os dados do evento em tempo real.

O valor numérico é 1.
ETW Em vez de registrar dados diretamente em arquivos de texto, o IIS enviará informações registradas para o Rastreamento de Eventos para Windows, um mecanismo de evento genérico integrado ao Windows. Você pode gerenciar dados registrados usando ferramentas de consulta padrão, como o Analisador de Mensagens ou ferramentas personalizadas. O ETW processa informações registradas em tempo real e oferece a capacidade de filtrar e exibir os dados e habilitar ou desabilitar o registro em log dinamicamente. O ETW também adiciona informações detalhadas aos dados do evento, fornecendo dados aos quais o HTTP.sys não tem acesso. Para obter mais informações, confira Rastreamento de Eventos.

O valor numérico é 2.
maxLogLineLength Atributo uint opcional.

Especifica o comprimento máximo de uma linha em um arquivo de log. Isso permite limitar a quantidade de dados acumulados pelo registro em log e economizar em espaço em disco, especialmente quando você adiciona campos de registro em log personalizados.

O intervalo é de 2 a 65.536. O valor padrão é 65536.
period Atributo de enumeração opcional.

Especifica a frequência com que o IIS cria um novo arquivo de log. O atributo period pode ser um dos valores possíveis a seguir.

O valor padrão é Daily.
Valor Descrição
Daily Crie um novo arquivo de log diariamente.

O valor numérico é 1.
Hourly Crie um novo arquivo de log por hora.

O valor numérico é 4.
MaxSize Crie um novo arquivo de log quando um tamanho máximo for atingido. O tamanho máximo é especificado no atributo truncateSize.

O valor numérico é 0.
Monthly Crie um novo arquivo de log mensalmente.

O valor numérico é 3.
Weekly Crie um novo arquivo de log semanalmente.

O valor numérico é 2.
truncateSize Atributo int64 opcional.

Especifica o tamanho máximo do arquivo de log (em bytes) após o qual um novo arquivo de log será criado. Esse valor só é aplicável quando MaxSize é escolhido para o atributo period. O tamanho mínimo do arquivo é 1,048,576 bytes. Se esse atributo for definido como um valor menor que 1,048,576 bytes, o valor padrão será implicitamente considerado como 1,048,576 bytes.

O valor padrão é 20971520.

Elementos filho

Elemento Descrição
customFields Elemento opcional.

Especifica as configurações de uma coleção de campos personalizados em um log do W3C.

Exemplo de configuração

O exemplo de configuração a seguir usa o atributo logExtFileFlags do elemento <logFile> para especificar as configurações que o IIS registra para um site chamado Contoso. O atributo period faz com que o IIS crie um novo arquivo de log do W3C a cada hora; o atributo localTimeRollover especifica que o IIS use o tempo no servidor local para determinar quando criar e nomear um novo arquivo de 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>

Exemplo de código

Os exemplos a seguir configuram o registro em log para um site chamado Contoso. Cada exemplo permite o registro em log para o site e configura o registro em log do site para gerar um novo arquivo de log diariamente. Eles também configuram o IIS para usar a hora no servidor local a fim de gerar os nomes de arquivo de log e determinar quando gerar novos arquivos de 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

Observação

Defina o parâmetro commit para apphost quando usar AppCmd.exe para definir essas configurações. Isso confirma as definições de configuração para a seção de local apropriado no arquivo 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