Condividi tramite


Aggiunta di campi personalizzati predefiniti a un componente aggiuntivo del file di <log>

Panoramica

L'elemento <add> nell'elemento specifica le impostazioni di configurazione per l'aggiunta <customFields> di campi personalizzati predefiniti in un log W3C.

IIS 8.5 consente di registrare campi personalizzati oltre al set registrato standard. Questi campi personalizzati possono includere dati da intestazioni di richiesta, intestazioni di risposta o variabili del server. Per registrare questi campi, è sufficiente impostare le proprietà di configurazione anziché creare un modulo di registrazione personalizzato. Questa funzionalità è disponibile solo a livello di sito. Il formato del file di log deve essere W3C per aggiungere campi personalizzati.

Quando un campo personalizzato è stato aggiunto al set standard, "_x" verrà aggiunto al nome del file per mostrare che il file di log contiene un campo personalizzato. La quantità totale di dati aggiunti nei campi personalizzati non può superare 65.536 byte. IIS tronca i dati se i dati registrati personalizzati superano tale quantità. La quantità massima di dati che è possibile aggiungere a un file di log in qualsiasi campo personalizzato viene specificata dall'attributo maxCustomFieldLength.

Per configurare un campo personalizzato, specificare il nome del campo, il nome di origine e il tipo di origine. È possibile inserire informazioni personalizzate in una variabile server e registrare la variabile del server. Dopo aver selezionato il tipo di origine, è possibile selezionare un nome di origine esistente o immettere un nuovo nome di origine.

I campi personalizzati consentono di raccogliere dati utili sul processo e aggregarli ai log IIS. In un sistema contenente un servizio di bilanciamento del carico potrebbe essere visualizzato l'indirizzo IP del servizio di bilanciamento del carico nel log, ma è possibile registrare l'intestazione X-Forwarded-For in un campo personalizzato, in modo da poter conoscere il richiedente originale. È possibile registrare il tempo di attività del processo per verificare il numero di volte in cui il processo è stato riavviato durante il giorno. Se la memoria viene usata eccessivamente, è possibile determinare in quale momento è stato avviato l'utilizzo della memoria, quale pagina è stata richiesta e l'ID del client (che sarebbe particolarmente utile se si stava eseguendo qualcosa di dannoso).

Compatibilità

Versione Note
IIS 10.0 L'elemento <add> non è stato modificato in IIS 10.0.
IIS 8,5 L'elemento <add> è stato introdotto in IIS 8.5.
IIS 8,0 N/D
IIS 7,5 N/D
IIS 7.0 N/D
IIS 6.0 N/D

Installazione

L'elemento <add> è incluso nell'installazione predefinita di IIS 8.5.

Procedure

Come aggiungere campi personalizzati predefiniti

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 R2:

      • Nella barra delle applicazioni fare clic su Server Manager, scegliere Strumenti e 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 e quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni selezionare il server.

  3. Fare doppio clic su Registrazione nella sezione IIS .

  4. Nella home page Registrazione selezionare W3C per Format.

  5. Fare clic su Seleziona campi.

  6. Nella finestra di dialogo Campi di registrazione W3C fare clic su Aggiungi campo.

  7. Nella finestra di dialogo Aggiungi campo personalizzato immettere un nome in Nome campo (senza spazi) e selezionare uno dei seguenti per il tipo di origine: Intestazione richiesta, intestazione di risposta o variabile server.

  8. In Origine selezionare un'origine dall'elenco oppure immettere il nome di un'origine personalizzata.

  9. Fare clic su OK, quindi fare di nuovo clic su OK .

  10. Nel riquadro Azione fare clic su Applica.

    Screenshot della finestra di dialogo Aggiungi campo personalizzato con le opzioni predefinite.

Come configurare la lunghezza massima predefinita del campo personalizzato

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 R2:

      • Nella barra delle applicazioni fare clic su Server Manager, scegliere Strumenti e 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 e quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni selezionare il server e quindi nell'area Gestione fare doppio clic su Editor di configurazione.

  3. Nell'editor di configurazione selezionare system.applicationHost e quindi selezionare siti.

  4. Fare clic su siteDefaults.

  5. Selezionare il sito, espandere logFile, espandere customFields e quindi fare clic su maxCustomFieldLength.

  6. Per maxCustomFieldLength, immettere la quantità massima di dati che è possibile aggiungere a un file di log in qualsiasi campo personalizzato, in byte.

  7. Chiudere l'Editor raccolta e quindi nel riquadro Azione fare clic su Applica.

    Screenshot della sezione Campi personalizzati delle proprietà file di log. La lunghezza massima del campo personalizzato è impostata su 4095.

Configurazione

L'elemento <add> è configurato a livello di server.

Attributi

Attributo Descrizione
logFieldName Attributo stringa obbligatorio.

Specifica il campo personalizzato predefinito da aggiungere al file di log. Il nome del campo non può contenere spazi.
sourceName Attributo stringa obbligatorio.

Specifica il nome della variabile http di intestazione o server che contiene valori da aggiungere a un campo personalizzato predefinito del log. Il nome può essere una stringa di origine personalizzata.
sourceType Attributo enumerazione obbligatorio.

Tipo di origine da aggiungere ai dati a un campo personalizzato predefinito nel log. Può essere RequestHeader (valore = 0), ResponseHeader (valore = 1) o ServerVariable (valore = 2).

Elementi figlio

Nessuno.

Esempio di configurazione

Nell'esempio di configurazione seguente viene usato l'elemento e il customFields relativo add elemento figlio per specificare le impostazioni predefinite del campo personalizzato per i log W3C.

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

Codice di esempio

Gli esempi seguenti configurano i campi personalizzati predefiniti per un log W3C.

AppCmd.exe

appcmd.exe set config  -section:system.applicationHost/sites /+"siteDefaults.logFile.customFields.[logFieldName='ContosoField',sourceName='ContosoSource',sourceType='ServerVariable']" /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");
            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'}