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
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).
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.
No painel Página Inicial, clique duas vezes em Registro em Log.
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.
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.
Como configurar o ETW ou o registro em log de arquivos para logs do W3C
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).
No painel Conexões, expanda o nome do servidor e Sites e, em seguida, selecione um site.
Na página inicial do site, clique duas vezes em Registro em Log.
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.
Como configurar a liberação de um log do W3C por contagem de entradas
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).
No painel Conexões, expanda o servidor e clique duas vezes no Editor de Configuração.
No Editor de Configuração, para a Seção, expanda
system.applicationHost
e selecione sites.Clique em (Coleção) e, em seguida, nas reticências.
Selecione o site que deseja configurar e expanda logFile.
Para flushByEntryCountW3Clog, insira o número de eventos a serem armazenados no buffer antes de serem liberados para o arquivo de log.
No painel Ação, clique em Aplicar.
Como configurar o comprimento máximo da linha de log
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).
No painel Conexões, expanda o servidor e clique duas vezes no Editor de Configuração.
No Editor de Configuração, para a Seção, expanda
system.applicationHost
e selecione sites.Clique em (Coleção) e, em seguida, nas reticências.
Selecione o site que deseja configurar e expanda logFile.
Para maxLogLineLength, insira o número máximo de bytes em uma única linha de um arquivo de log.
No painel Ação, clique em Aplicar.
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 .
|
||||||||||||||||||||||||||||||||||||||||||||||
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 .
|
||||||||||||||||||||||||||||||||||||||||||||||
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.
|
||||||||||||||||||||||||||||||||||||||||||||||
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 .
|
||||||||||||||||||||||||||||||||||||||||||||||
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