Freigeben über


Benutzerdefinierte Standardfelder in Protokolldateien: <customFields>-Element

Übersicht

Das <customFields>-Element des <logFile>-Elements gibt die Konfigurationseinstellungen für eine Sammlung von benutzerdefinierten Standardfeldern in einem W3C-Protokoll (World Wide Web Consortium) an.

In IIS 8.5 können Sie zusätzlich zu den standardmäßig protokollierten Feldern auch benutzerdefinierte Felder protokollieren. Diese benutzerdefinierten Felder können Daten aus Anforderungsheadern, Antwortheadern oder Servervariablen enthalten. Um diese Felder zu protokollieren, können Sie einfach Konfigurationseigenschaften festlegen, anstatt ein benutzerdefiniertes Protokollierungsmodul zu erstellen. Dieses Feature ist nur auf Siteebene verfügbar. Das Protokolldateiformat muss auf W3C festgelegt sein, wenn Sie benutzerdefinierte Felder hinzufügen möchten.

Wenn dem Standardsatz ein benutzerdefiniertes Feld hinzugefügt wurde, wird „_x“ an den Dateinamen angefügt, um anzuzeigen, dass die Protokolldatei ein benutzerdefiniertes Feld enthält. Die Gesamtmenge der in benutzerdefinierten Feldern hinzugefügten Daten darf 65.536 Byte nicht überschreiten. IIS schneidet die Daten ab, wenn die benutzerdefinierten protokollierten Daten diese Menge überschreiten. Die maximale Datenmenge, die einer Protokolldatei in einem benutzerdefinierten Feld hinzugefügt werden kann, wird durch das maxCustomFieldLength-Attribut angegeben.

Um ein benutzerdefiniertes Feld zu konfigurieren, geben Sie den Feldnamen, den Quellnamen und den Quelltyp an. Sie können benutzerdefinierte Informationen in eine Servervariable einfügen und die Servervariable protokollieren. Nachdem Sie den Quelltyp ausgewählt haben, können Sie entweder einen vorhandenen Quellnamen auswählen oder einen neuen Quellnamen eingeben.

Benutzerdefinierte Felder ermöglichen es Ihnen, nützliche Daten über den Prozess zu sammeln und sie in die IIS-Protokolle zu aggregieren. In einem System mit einem Lastenausgleich wird möglicherweise die IP-Adresse des Lastenausgleichs im Protokoll angezeigt, Sie können jedoch den X-Forwarded-For-Header in einem benutzerdefinierten Feld protokollieren, damit Sie feststellen können, wer der ursprüngliche Anforderer war. Sie können die Prozessbetriebszeit protokollieren, um zu sehen, wie oft der Prozess im Laufe des Tages neu gestartet wurde. Wenn der Prozess beginnt, übermäßig viel Arbeitsspeicher zu nutzen, können Sie feststellen, ab wann Arbeitsspeicher verbraucht wurde, welche Seite angefordert wurde und wie die ID des Clients lautet (was insbesondere bei schädlichen Aktivitäten nützlich ist).

Kompatibilität

Version Hinweise
IIS 10.0 Das <customFields>-Element wurde in IIS 10.0 nicht geändert.
IIS 8.5 Das <customFields>-Element wurde in IIS 8.5 eingeführt.
IIS 8.0 N/V
IIS 7.5 N/V
IIS 7.0 N/V
IIS 6.0 N/V

Setup

Das <customFields>-Element ist in der Standardinstallation von IIS 8.5 und höher enthalten.

Gewusst wie

Hinzufügen von benutzerdefinierten Standardfeldern

  1. Öffnen Sie Internetinformationsdienste-Manager (IIS):

    • Vorgehensweise unter Windows Server 2012 R2:

      • Klicken Sie auf der Taskleiste auf Server-Manager, wählen Sie Tools und dann Internetinformationsdienste-Manager (IIS) aus.
    • Vorgehensweise unter Windows 8.1:

      • Halten Sie die Windows-Logo-Taste gedrückt, drücken Sie den Buchstaben X, und klicken Sie dann auf Systemsteuerung.
      • Klicken Sie auf Verwaltung, und doppelklicken Sie dann auf Internetinformationsdienste-Manager (IIS).
  2. Wählen Sie im Bereich Verbindungen den Server aus.

  3. Doppelklicken Sie im Bereich IIS auf Protokollierung.

  4. Wählen Sie auf der Startseite Protokollierung für Format die Option W3C aus.

  5. Klicken Sie auf Felder auswählen.

  6. Klicken Sie im Dialogfeld W3C-Protokollierungsfelder auf Feld hinzufügen.

  7. Geben Sie im Dialogfeld Benutzerdefiniertes Feld hinzufügen einen Namen in Feldname ein (ohne Leerzeichen), und wählen Sie eine der folgenden Optionen für Quelltyp aus: Anforderungsheader, Antwortheader oder Servervariable.

  8. Wählen Sie unter Quelle eine Quelle in der Liste aus, oder geben Sie den Namen einer benutzerdefinierten Quelle ein.

  9. Klicken Sie auf OK und dann erneut auf OK.

  10. Klicken Sie im Bereich Aktion auf Übernehmen.

    Screenshot shows Add Custom Field dialog box with Field Name box. Request Header selected in the Source Type box.

Konfigurieren der standardmäßigen maximalen Länge von benutzerdefinierten Feldern

  1. Öffnen Sie Internetinformationsdienste-Manager (IIS):

    • Vorgehensweise unter Windows Server 2012 R2:

      • Klicken Sie auf der Taskleiste auf Server-Manager, wählen Sie Tools und dann Internetinformationsdienste-Manager (IIS) aus.
    • Vorgehensweise unter Windows 8.1:

      • Halten Sie die Windows-Logo-Taste gedrückt, drücken Sie den Buchstaben X, und klicken Sie dann auf Systemsteuerung.
      • Klicken Sie auf Verwaltung, und doppelklicken Sie dann auf Internetinformationsdienste-Manager (IIS).
  2. Wählen Sie im Bereich Verbindungen den Server aus, und doppelklicken Sie dann im Bereich Verwaltung auf Konfigurations-Editor.

  3. Wählen Sie im Konfigurations-Editor für Abschnitt den Eintrag system.applicationHost und dann Sites aus.

  4. Klicken Sie auf siteDefaults.

  5. Wählen Sie die Site aus, erweitern Sie logFile und dann customFields, und klicken Sie auf maxCustomFieldLength.

  6. Geben Sie für maxCustomFieldLength die maximale Datenmenge (in Byte) ein, die einer Protokolldatei in einem benutzerdefinierten Feld hinzugefügt werden kann.

  7. Schließen Sie den Auflistungs-Editor, und klicken Sie dann im Bereich Aktion auf Übernehmen.

    Screenshot of log File pane with Custom Fields node expanded and max Custom Field Length selected.

Konfiguration

Das <customFields>-Element für Standardeinstellungen wird auf der Serverebene konfiguriert.

Attribute

Attribut Beschreibung
maxCustomFieldLength Optionales uint-Attribut.

Die maximale Datenmenge (in Byte), die einer Protokolldatei in einem benutzerdefinierten Feld hinzugefügt werden kann.

Der gültige Bereich ist 2 bis 65.536. Der Standardwert ist 4096.

Untergeordnete Elemente

Element Beschreibung
add Optionales Element.

Gibt die Konfigurationseinstellungen für benutzerdefinierte Standardfelder in einem W3C-Protokoll an.

Konfigurationsbeispiel

Im folgenden Konfigurationsbeispiel werden das customFields-Element und das untergeordnete add-Element verwendet, um die Einstellungen für benutzerdefinierte Standardfelder für W3C-Protokolle festzulegen.

<siteDefaults>
    <logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" flushByEntryCountW3CLog="0">
        <customFields>
            <clear />
            <add logFieldName="ContosoField" sourceName="ContosoSource" sourceType="ServerVariable" />
        </customFields>
    </logFile>
</siteDefaults>

Beispielcode

In den folgenden Beispielen werden benutzerdefinierte Standardfelder für ein W3C-Protokoll konfiguriert.

AppCmd.exe

appcmd.exe set config  -section:system.applicationHost/sites /+"siteDefaults.logFile.customFields.[logFieldName='ContosoField',sourceName='ContosoSource',sourceType='ServerVariable']" /commit:apphost

Hinweis

Sie müssen den commit-Parameter auf apphost festlegen, wenn Sie „AppCmd.exe“ verwenden, um diese Einstellungen zu konfigurieren. Dadurch werden die Konfigurationseinstellungen in den entsprechenden Location-Abschnitt der Datei „ApplicationHost.config“ committet.

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");
            ConfigurationElement siteDefaultsElement = sitesSection.GetChildElement("siteDefaults");
            ConfigurationElement logFileElement = siteDefaultsElement.GetChildElement("logFile");
            ConfigurationElement customFieldsElement = logFileElement.GetChildElement("customFields");
            ConfigurationElementCollection customFieldsCollection = customFieldsElement.GetCollection();
            
            ConfigurationElement addElement = customFieldsCollection.CreateElement("add");
            addElement["logFieldName"] = @"ContosoField";
            addElement["sourceName"] = @"ContosoSource";
            addElement["sourceType"] = @"ServerVariable";
            customFieldsCollection.Add(addElement);
            
            serverManager.CommitChanges();
        }
    }
}

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 siteDefaultsElement As ConfigurationElement =  sitesSection.GetChildElement("siteDefaults")
        Dim logFileElement As ConfigurationElement =  siteDefaultsElement.GetChildElement("logFile")
        Dim customFieldsElement As ConfigurationElement =  logFileElement.GetChildElement("customFields")
        Dim customFieldsCollection As ConfigurationElementCollection =  customFieldsElement.GetCollection
        Dim addElement As ConfigurationElement =  customFieldsCollection.CreateElement("add")
        addElement("logFieldName") = "ContosoField"
        addElement("sourceName") = "ContosoSource"
        addElement("sourceType") = "ServerVariable"
        customFieldsCollection.Add(addElement)
        serverManager.CommitChanges
    End Sub
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 siteDefaultsElement = sitesSection.ChildElements.Item("siteDefaults");
var logFileElement = siteDefaultsElement.ChildElements.Item("logFile");
var customFieldsElement = logFileElement.ChildElements.Item("customFields");

var customFieldsCollection = customFieldsElement.Collection;

var addElement = customFieldsCollection.CreateNewElement("add");
addElement.Properties.Item("logFieldName").Value = "ContosoField";
addElement.Properties.Item("sourceName").Value = "ContosoSource";
addElement.Properties.Item("sourceType").Value = "ServerVariable";
customFieldsCollection.AddElement(addElement);

adminManager.CommitChanges();

VBScript

Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")
Set siteDefaultsElement = sitesSection.ChildElements.Item("siteDefaults")
Set logFileElement = siteDefaultsElement.ChildElements.Item("logFile")
Set customFieldsElement = logFileElement.ChildElements.Item("customFields")

Set customFieldsCollection = customFieldsElement.Collection

Set addElement = customFieldsCollection.CreateNewElement("add")
addElement.Properties.Item("logFieldName").Value = "ContosoField"
addElement.Properties.Item("sourceName").Value = "ContosoSource"
addElement.Properties.Item("sourceType").Value = "ServerVariable"
customFieldsCollection.AddElement(addElement)

adminManager.CommitChanges()

PowerShell

Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST'  -filter "system.applicationHost/sites/siteDefaults/logFile/customFields" -name "." -value @{logFieldName='ContosoField';sourceName='ContosoSource';sourceType='ServerVariable'}