Schreiben in den Vereinheitlichten Protokollierungsdienst (ULS) von SharePoint aus JavaScript

SharePoint 2010

Zusammenfassung:  Informationen zum Konfigurieren und Verwenden des Vereinheitlichten Protokollierungsdiensts (Unified Logging Service, ULS) von SharePoint in benutzerdefinierten JavaScript-Dateien.

Microsoft SharePoint Foundation stellt einen leistungsstarken Protokollierungsmechanismus bereit, den so genanten Vereinheitlichten Protokollierungsdienst oder Unified Logging Service (ULS). Der ULS ermöglicht es Entwicklern, Informationen zu erfassen, die bei der Erkennung und Behebung von Problemen während des Anwendungslebenszyklus nützlich sind. Der ULS schreibt SharePoint Foundation-Ereignisse in das SharePoint-Ablaufverfolgungsprotokoll und speichert sie im Dateisystem, normalerweise im SharePoint-Stammordner in Dateien mit dem Namen \14\LOGS\SERVER-JJJMMTT-ID.log.

Der ULS stellt ein umfangreiches verwaltetes Objektmodell bereit. Damit können Entwickler eigene Konfigurationen wie etwa Kategorien und Schweregrade angeben und gleichzeitig Ausnahmen oder Ablaufverfgolgungsmeldungen in die ULS-Protokolle schreiben. Weitere Informationen zur verwalteten API finden Sie im Artikel Schreiben in das Ablaufprotokoll aus benutzerdefiniertem Code.

Da Entwickler mit dem leistungsfähigen Clientobjektmodell in SharePoint 2010 komplexe Clientanwendungen erstellen können, ist es sehr wichtig, nützliche Informationen zu schreiben, die nicht auf der Benutzeroberfläche sichtbar sind, sondern auf dem Server aufgezeichnet werden, damit sie von Administratoren und Entwicklern überwacht werden können.

Damit diese Szenarien für Anwendungen abgedeckt werden, die in Thin Client-Browsern ausgeführt werden, bietet SharePoint Foundation einen Webdienst namens SharePoint Diagnostics (diagnostics.asmx). Durch diesen Webdienst kann eine Clientanwendung Diagnoseberichte direkt an die ULS-Protokolle übermitteln.

Dieser Artikel befasst sich hauptsächlich damit, wie Sie mithilfe des SharePoint Diagnostics-Webdiensts Ablaufverfolgungsmeldungen aus einer benutzerdefinierten JavaScript-Anwendung in die ULS-Protokolle schreiben können.

Dabei werden die folgenden Themen behandelt:

  • Übersicht über die SendClientScriptErrorReport-Webmethode

  • Erstellen einer einfachen JavaScript-Anwendung zum Protokollieren von Ablaufverfolgungsmeldungen mithilfe des SharePoint Diagnostics-Webdiensts

  • Einrichten der erforderlichen Konfigurationen für die Protokollierung über den Diagnostics-Webdienst

  • Verwenden der Anwendung

  • Verwenden des ULS-Protokollierungsskripts für Lösungen mit eingeschränkter Sicherheitsstufe

Der Diagnostics-Webdienst stellt eine einzelne Methode namens SendClientScriptErrorReport bereit, die es Clientanwendungen ermöglicht, Fehler an den ULS zu melden. In der folgenden Tabelle werden die Parameter aufgelistet, die von der SendClientScriptErrorReport-Methode benötigt werden.

Parametername

Beschreibung

Beispiele für Werte

Message

Eine Zeichenfolge, die die Meldung enthält, die dem Client angezeigt werden soll

Der Wert der Eigenschaft displaypage ist Null oder undefiniert, kein Function-Objekt.

File

Der URL-Dateiname, der dem aktuellen Fehler zugeordnet ist

customscript.js

Line

Eine Zeichenfolge, die die Codezeile enthält, von der der Fehler generiert worden ist

9

Client

Eine Zeichenfolge, die den Namen des Client enthält, auf dem der Fehler aufgetreten ist

<client><browser name='Internet Explorer' version='9.0'></browser><language> en-us </language></client>

Stack

Eine Zeichenfolge, die die Aufruflisteninformationen aus dem generierten Fehler enthält

<stack><function depth='0' signature=' myFunction() '>function myFunction() { 'displaypage ();}</function></stack>

Team

Eine Zeichenfolge, die einen Team- oder Produktnamen enthält

Benutzerdefinierte SharePoint-Anwendung

originalFile

Der Name der physischen Datei, die mit dem aktuellen Fehler zusammenhängt

customscript.js

Beachten Sie, dass die Beispielwerte für Client und Stack in der Tabelle XML-Fragmente darstellen und nicht einzelne Textzeilen. Diese Informationen werden in der Protokollspezifikation angegeben, die in 3.1.4.1.7.1 SendClientScriptErrorReport dokumentiert ist. Obwohl die Protokollspezifikation für diese Parameter ein gültiges XML-Fragment erfordert, wird der Webdienstaufruf dieser Methode erfolgreich ausgeführt, auch wenn die für diese Parameter bereitgestellten Werte diesem Schema nicht entsprechen und obwohl durch das derartige Erstellen des Clients und der Liste noch mehr Informationen in die Ablaufverfolgung geschrieben würden.

Wie die Parameterliste in der Tabelle zeigt, stellt die SendClientScriptErrorReport-Webmethode im Gegensatz zur verwalteten API keine Möglichkeit zum Angeben der Kategorie oder des Schweregrads der protokollierten Meldung bereit. Wenn man vom Namen und von der Beschreibung der Methode ausgeht, müsste die protokollierte Ausnahme zudem scheinbar den Schweregrad als Error angeben. Jede Meldung, die über den SharePoint Diagnostics-Webdienst protokolliert wird, wird aber immer unter der Kategorie Unified Logging Service angezeigt und hat im Ablaufverfolgungsprotokoll den Schweregrad Verbose.

Die Schritte zum Anzeigen der Ablaufverfolgungen, die über den SharePoint Diagnostics-Webdienst geschrieben wurden, werden weiter unten in diesem Artikel erläutert.

In diesem Abschnitt erstellen Sie eine JavaScript-Anwendung, die mithilfe des Diagnostics-Webdiensts Fehler an den ULS meldet. Die Anwendung enthält eine JavaScript-Datei namens ULSLogScript.js, die die erforderlichen Funktionen zum Kommunizieren und Protokollieren von Ablaufverfolgungen im Diagnostics-Webdienst beinhaltet. Diese Funktionen werden dann direkt von einem beliebigen Consumerskript aufgerufen.

Hinweis Hinweis

Dies ist eine relativ einfache Anwendung mit nur einer Datei. Sie erstellen also keine formelle SharePoint-Lösung, vielmehr speichern Sie die Dateien direkt im Verzeichnis Layouts in der SharePoint-Struktur.

So erstellen Sie eine JavaScript-Bibliothek, die die ULS-Protokollierungslogik enthält

  1. Starten Sie Microsoft Visual Studio 2010.

  2. Erstellen Sie über das Menü Datei eine neue JScript-Datei, und speichern Sie sie unter folgendem Pfad: <SharePoint Installation Folder>\14\TEMPLATE\LAYOUTS\LoggingSample\ULSLogScript.js.

    Beispiel: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\LoggingSample\ULSLogScript.js.

    Hinweis Hinweis

    Sie müssen im Ordner Layouts ein neues Verzeichnis namens LoggingSample erstellen.

  3. Da Sie die JQuery-Bibliothek in der Anwendung verwenden, laden Sie die Datei jquery-1.6.4.min.js aus dem JQuery-Portal herunter, und fügen Sie sie dem zuvor erstellten Ordner LoggingSample hinzu.

  4. Geben oder fügen Sie den folgenden Code in die Datei ULSLogScript.js ein.

    // Creates a custom ulslog object
    // with the required properties.
    function ulsObject() {
        this.message = null;
        this.file = null;
        this.line = null;
        this.client = null;
        this.stack = null;
        this.team = null;
        this.originalFile = null;
    }
    

    Die ulsObject-Funktion gibt eine neue Instanz eines benutzerdefinierten Objekts zurück, deren Eigenschaften den Parametern zugeordnet sind, die von der SendClientScriptErrorReport-Methode benötigt werden. Dieses Objekt wird im gesamten Skript zur Ausführung verschiedener Vorgänge verwendet.

  5. Definieren Sie die Methoden, die die in der ulsObject-Methode angegebenen Eigenschaftenwerte auffüllen. Beginnen Sie, indem Sie die Funktion definieren, die die client-Eigenschaft abruft. Geben oder fügen Sie nach der ulsObject-Methode den folgenden Code ein.

    // Detecting the browser to create the client information
    // in the required format.
    function getClientInfo() {
        var browserName = '';
    
        if (jQuery.browser.msie)
            browserName = "Internet Explorer";
        else if (jQuery.browser.mozilla)
            browserName = "Firefox";
        else if (jQuery.browser.safari)
            browserName = "Safari";
        else if (jQuery.browser.opera)
            browserName = "Opera";
        else
            browserName = "Unknown";
    
        var browserVersion = jQuery.browser.version;
        var browserLanguage = navigator.language;
        if (browserLanguage == undefined) {
            browserLanguage = navigator.userLanguage;
        }
    
        var client = "<client><browser name='{0}' version='{1}'></browser><language>{2}</language></client>";
        client = String.format(client, browserName, browserVersion, browserLanguage);
     
        return client;
    }
    
    // Utility function to assist string formatting.
    String.format = function () {
        var s = arguments[0];
        for (var i = 0; i < arguments.length - 1; i++) {
            var reg = new RegExp("\\{" + i + "\\}", "gm");
            s = s.replace(reg, arguments[i + 1]);
        }
    
        return s;
    }
    

    Die getClientInfo-Funktion ermittelt anhand der JQuery-Bibliothek die aktuellen Browsereigenschaften, z. B. den Namen und die Version, und erstellt dann ein XML-Fragment (wie oben erwähnt), das die Details des Browsers beschreibt, in dem die Anwendung derzeit ausgeführt wird. Darüber hinaus unterstützt eine Hilfsfunktion namens String.format die Zeichenfolgenformatierung durch den Code.

  6. Als Nächstes benötigen Sie eine Funktion zum Erstellen der Aufrufliste für die im Skript ausgelöste Ausnahme. Fügen Sie dem Code in ULSLogScript.js die folgenden Funktionen hinzu.

    // Creates the callstack in the required format 
    // using the caller function definition.
    function getCallStack(functionDef, depth) {
        if (functionDef != null) {
            var signature = '';
            functionDef = functionDef.toString();
            signature = functionDef.substring(0, functionDef.indexOf("{"));
            if (signature.indexOf("function") == 0) {
                signature = signature.substring(8);
            }
    
            if (depth == 0) {
                var stack = "<stack><function depth='0' signature='{0}'>{1}</function></stack>";
                stack = String.format(stack, signature, functionDef);
            }
            else {
                var stack = "<stack><function depth='1' signature='{0}'></function></stack>";
                stack = String.format(stack, signature);
            }
    
            return stack;
        }
    
        return "";
    }
    

    Die getCallStack-Funktion empfängt die Funktionsdefinition, in der die Ausnahme aufgetreten ist, und eine Tiefe als Parameter. Anhand des Tiefenparameters entscheidet die Funktion, ob nur die Signatur der Aufruferfunktion benötigt wird oder ob die gesamte Funktionsdefinition eingeschlossen werden muss. Basierend auf der Definition der Aufruferfunktion extrahiert die getCallStack-Funktion die benötigten Informationen, z. B. die Signatur oder den Rumpf, und erstellt ein XML-Fragment, wie in der Protokollspezifikation beschrieben.

  7. Als Nächstes erstellen Sie eine Funktion, die ein SOAP-Paket in dem Format generiert, das von der SendClientScriptErrorReport-Methode des Diagnostics-Webdiensts erwartet wird. Geben oder fügen Sie die folgenden Funktionen in die Datei ULSLogScript.js ein.

    // Creates the SOAP packet required by SendClientScriptErrorReport
    // web method.
    function generateErrorPacket(ulsObj) {
        var soapPacket = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                            "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
                                           "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "+
                                           "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
                              "<soap:Body>" +
                                "<SendClientScriptErrorReport " +
                                  "xmlns=\"http://schemas.microsoft.com/sharepoint/diagnostics/\">" +
                                  "<message>{0}</message>" +
                                  "<file>{1}</file>" +
                                  "<line>{2}</line>" +
                                  "<stack>{3}</stack>" +
                                  "<client>{4}</client>" +
                                  "<team>{5}</team>" +
                                  "<originalFile>{6}</originalFile>" +
                                "</SendClientScriptErrorReport>" +
                              "</soap:Body>" +
                            "</soap:Envelope>";
     
        soapPacket = String.format(soapPacket, encodeXmlString(ulsObj.message), encodeXmlString(ulsObj.file), 
                     ulsObj.line, encodeXmlString(ulsObj.stack), encodeXmlString(ulsObj.client), 
                     encodeXmlString(ulsObj.team), encodeXmlString(ulsObj.originalFile));
     
        return soapPacket;
    }
    
    // Utility function to encode special characters in XML.
    function encodeXmlString(txt) {
        txt = String(txt);
        txt = jQuery.trim(txt);
        txt = txt.replace(/&/g, "&amp;");
        txt = txt.replace(/</g, "&lt;");
        txt = txt.replace(/>/g, "&gt;");
        txt = txt.replace(/'/g, "&apos;");
        txt = txt.replace(/"/g, "&quot;");
     
        return txt;
    }
    

    Die generateErrorPacket-Funktion empfängt eine Instanz des ulsObj-Objekts und gibt das SOAP-Paket für die SendClientScriptErrorReport-Funktion als Zeichenfolge im erwarteten Format zurück. Da die Werte für bestimmte Parameter als XML-Fragment erwartet werden, wird die encodeXmlString-Funktion zum Codieren der Sonderzeichen verwendet.

  8. Nachdem das SOAP-Paket definiert worden ist, brauchen Sie eine Funktion, die eine asynchrone Anforderung an den Diagnostics-Webdienst ausgibt. Fügen Sie den unten stehenden Code der Datei ULSLogScript.js hinzu.

    // Function to form the Diagnostics service URL.
    function getWebSvcUrl() {
        var serverurl = location.href;
        if (serverurl.indexOf("?") != -1) {
            serverurl = serverurl.replace(location.search, '');
        }
     
        var index = serverurl.lastIndexOf("/");
        serverurl = serverurl.substring(0, index - 1);
        serverurl = serverurl.concat('/_vti_bin/diagnostics.asmx');
     
        return serverurl;
    }
    
    // Method to post the SOAP packet to the Diagnostic web service.
    function postMessageToULSSvc(soapPacket) {
        $(document).ready(function () {
            $.ajax({
                url: getWebSvcUrl(),
                type: "POST",
                dataType: "xml",
                data: soapPacket, //soap packet.
                contentType: "text/xml; charset=\"utf-8\"",
                success: handleResponse, // Invoke when the web service call is successful.
                error: handleError// Invoke when the web service call fails.
            });
        });
    }
    
    // Invoked when the web service call succeeds.
    function handleResponse(data, textStatus, jqXHR) {
        // Custom code...
        alert('Successfully logged trace to ULS');
     }
     
    // Invoked when the web service call fails.
    function handleError(jqXHR, textStatus, errorThrown) {
        //Custom code...
            alert('Error occurred in executing the web request');
    }
    

    Die postMessageToULSSvc-Funktion führt eine asynchrone HTTP-Anforderung aus und übermittelt das SOAP-Paket an den Diagnostics-Webdienst. Die URL des Diagnostics-Webdiensts wird in der getWebSvcUrl-Funktion dynamisch konstruiert. Die postMessageToULSSvc-Funktion definiert außerdem die betreffenden Handler für Erfolgs- oder Fehlerantworten. Anstatt Warnungen in den Handlern anzuzeigen, können Sie andere Logik je nach den Anforderungen der Anwendung schreiben.

  9. Schließlich benötigen Sie noch eine Funktion, die automatisch aufgerufen wird, wenn im Code ein Fehler auftritt. Um diese Funktion global für alle JavaScript-Funktionen auf der Seite zu registrieren, hängen Sie sie an das window.onerror-Ereignis an. Fügen Sie die folgenden Codezeile als erste Zeile der Datei ULSLogScript.js hinzu.

    // Registering the ULS logging function on a global level.
    window.onerror = logErrorToULS;
    
    // Set default value for teamName.
    var teamName = "Custom SharePoint Application";
    
    // Further add the logErrorToULS method at the end of the script.
    
    // Function to log messages to Diagnostic web service.
    // Invoked by the window.onerror message.
    function logErrorToULS(msg, url, linenumber) {
        var ulsObj = new ulsObject();
        ulsObj.message = "Error occurred: " + msg;
        ulsObj.file = url.substring(url.lastIndexOf("/") + 1); // Get the current file name.
        ulsObj.line = linenumber;
        ulsObj.stack = getCallStack(logErrorToULS.caller); // Create error call stack.
        ulsObj.client = getClientInfo(); // Create client information.
        ulsObj.team = teamName; // Declared in the consumer script.
        ulsObj.originalFile = ulsObj.file;
    
        var soapPacket = generateErrorPacket(ulsObj); // Create the soap packet.
        postMessageToULSSvc(soapPacket); // Post to the web service.
    
        return true;
    }
    

    Die Zeile window.onerror = logErrorToULS verknüpft die Funktion logErrorToULS mit dem window.onerror-Ereignis. Dadurch können Sie die benötigten Informationen wie die Fehlermeldung, die Zeilennummer und die Fehlerdatei erfassen. Anhand der teamName-Variable können Sie einen eindeutigen Wert in Bezug auf die aufrufende Anwendung festlegen. Dieser kann in den Consumerskripts überschrieben werden. Die logErrorToULS-Funktion erstellt eine Instanz des ulsObj-Objekts und füllt alle seine Eigenschaften auf. Hier sehen Sie, dass die Listeneigenschaft des ulsObj-Objekts auf logErrorToULS.caller festgelegt ist. Dadurch wird die Funktionsdefinition der Methode, die diese Funktion aufgerufen hat, bereitgestellt. Die postMessageToULSSvc-Funktion wird aufgerufen, damit die Fehlerinformationen in die Ablaufverfolgungsprotokolle geschrieben werden.

    HinweisHinweis

    Da Sie den Schweregrad der Ablaufverfolgungsmeldung nicht in der SendClientScriptErrorReport-Methode angeben können, wird der Meldungseigenschaft des ulsObj-Objekts Text vorangestellt, der angibt, dass die protokollierte Meldung Teil einer Ausnahme ist.

  10. Die logErrorToULS-Funktion wird automatisch aufgerufen, wenn ein Fehler auf der Seite auftritt. Damit eine Ablaufverfolgungsmeldung jedoch absichtlich in den ULS geschrieben wird, müssen Sie eine weitere Funktion verwenden, die speziell aufgerufen wird. Fügen Sie die folgende Funktion genau unter der logErrorToULS-Funktion hinzu.

    // Function to log message to Diagnostic web service.
    // Specifically invoked by a consumer method.
    function logMessageToULS(message, fileName) {
        if (message != null) {
            var ulsObj = new ulsObject();
            ulsObj.message = message;
            ulsObj.file = fileName;
            ulsObj.line = 0; // We don't know the line, so we set it to zero.
            ulsObj.stack = getCallStack(logMessageToULS.caller);
            ulsObj.client = getClientInfo();
            ulsObj.team = teamName;
            ulsObj.originalFile = ulsObj.file;
    
            var soapPacket = generateErrorPacket(ulsObj);
            postMessageToULSSvc(soapPacket);
        }
    }
    

    Anders als die logErrorToULS-Funktion nimmt die logMessageToULS-Funktion die zu protokollierende Meldung und den Namen der Datei, in der der Fehler auftrat, als Parameter an.

Bisher haben Sie also die erforderliche Logik zum Schreiben von Ablaufverfolgungsmeldungen oder Ausnahmen in die ULS-Protokolle erstellt. Nun müssen Sie eine Funktion schreiben, die die logErrorToULS- oder die logMessageToULS-Funktion verwendet.

So erstellen Sie die Consumeranwendung

  1. Navigieren Sie zu der SharePoint-Website.

  2. Erstellen Sie ein neues Webparts-Seite.

  3. Fügen Sie einen Inhalts-Editor-Webpart in einer der verfügbaren Webpartzonen hinzu.

  4. Bearbeiten Sie das Webpart, und geben oder fügen Sie den folgenden Text in die HTML-Quelle ein.

    <script src="/_layouts/LoggingSample/jquery-1.6.4.min.js" type="text/javascript"></script>
     <script src="/_layouts/LoggingSample/ULSLogScript.js" type="text/javascript"></script>
     <script type="text/javascript">
            var teamName = "Simple ULS Logging";
            function doWork() {
                unknownFunction();
            }
            function logMessage() {
                logMessageToULS('This is a trace message from CEWP', 'loggingsample.aspx');
            }
     </script>
    
    <input type="button" value="Log Exception" onclick="doWork();" />
        <br /><br />
      <input type="button" value="Log Trace" onclick="logMessage();" />
    
    

    Dieser HTML-Code enthält die Skriptverweise, die benötigt werden, um die JQuery-Bibliothek und die im vorherigen Abschnitt erstellte Datei ULSLogScript.js einzuschließen. Er enthält außerdem die beiden Inline-JavaScript-Funktionen und die entsprechenden Eingabeschaltflächen, mit denen diese aufgerufen werden.

    Zur Veranschaulichung der Ausnahmebehandlung ruft die doWork-Funktion eine unknownFunction-Funktion auf, die nicht existiert. Dadurch wird eine Ausnahme ausgelöst, die vom Code des Skripts ULSLogScript.js abgefangen und protokolliert wird. Zur Demonstration der Meldungsprotokollierung ruft die logMessage-Funktion die logMessageToULS-Funktion auf, mit der Ablaufverfolgungsmeldungen in ULS geschrieben werden.

  5. Beenden Sie den Entwurfsmodus für Webseiten.

  6. Speichern Sie die Webparts-Seite.

Zum Schluss müssen Sie den Diagnoseprotokollierungsdienst in der SharePoint-Zentraladministration konfigurieren, um sicherzustellen, dass die vom Diagnostics-Webdienst protokollierten Ablaufverfolgungen und Ausnahmen in den ULS-Protokollen sichtbar sind.

So konfigurieren Sie den Diagnoseprotokollierungsdienst

  1. Öffnen Sie die SharePoint-Zentraladministration.

  2. Klicken Sie im Schnellstartmenü auf Überwachung.

    Abbildung 1. Klicken Sie auf "Überwachung"

    Klicken Sie auf die Option "Überwachung"
  3. Klicken Sie auf der Seite Überwachung im Abschnitt Berichterstellung auf Diagnoseprotokollierung konfigurieren.

    Abbildung 2. Klicken Sie auf "Diagnoseprotokollierung konfigurieren"

    Klicken Sie auf Konfigurieren der Diagnoseprotokollierung
  4. Erweitern Sie die Kategorie SharePoint Foundation.

    Abbildung 3. Erweitern Sie die Kategorie "SharePoint Foundation"

    Erweitern Sie die Kategorie "SharePoint Foundation"
  5. Wählen Sie die Kategorie Unified Logging Service aus.

    Abbildung 4. Wählen Sie "Unified Logging Service" aus

    Wählen Sie "Unified Logging Service" aus
  6. Wählen Sie in der Liste Unwichtigstes, im Ablaufverfolgungsprotokoll aufzuzeichnendes Ereignis die Option Ausführlich aus.

    Abbildung 5. Wählen Sie "Ausführlich" in der Dropdownliste aus

    Wählen Sie in der Dropdownliste "Ausführlich" aus
  7. Klicken Sie auf OK, um die Konfiguration zu speichern.

Der Server ist nun bereit zur Protokollierung von Ablaufverfolgungen, die vom Diagnostics-Webdienst an den ULS gesendet wurden. Diese Ablaufverfolgungen werden unter der Kategorie Unified Logging Service mit dem Schweregrad Ausführlich angezeigt.

In diesem Abschnitt testen Sie die Anwendung, indem Sie eine Warnung auslösen, die im ULS protokolliert wird.

So testen Sie die Protokollierungsanwendung

  1. Klicken Se auf die Schaltfläche Ausnahme protokollieren im Inhalts-Editor-Webpart.

    Abbildung 6. Klicken Sie auf die Schaltfläche "Ausnahme protokollieren"

    Klicken Sie auf die Schaltfläche "Ausnahme protokollieren"
  2. Eine Meldung weist darauf hin, dass die Ausnahme erfolgreich im ULS protokolliert wurde.

    Abbildung 7. Bestätigungsmeldung

    Bestätigungsmeldung
  3. Wenn Sie die Details der Ausnahme in den ULS-Protokollen sehen möchten, navigieren Sie zum Ordner Logs in der SharePoint-Struktur ({SP Installation Path}\14\LOGS\).

  4. Da im Ordner Logs mehrere Protokolldateien vorhanden sein können, sortieren Sie das Feld Geändert am in absteigender Reihenfolge.

  5. Öffnen Sie die jüngste Protokolldatei in einem Text-Editor, z. B in Editor, und suchen Sie dann nach Simple ULS Logging (dem zuvor angegebenen Teamnamen). Im folgenden Text sollten Sie nun alle Webdienstparameter sehen, wie sie von der Clientanwendung bereitgestellt werden, von Message bis OriginalFileName:

    10/14/2011 21:00:37.87 w3wp.exe (0x097C) 0x14DCSharePoint Foundation Unified Logging Service a084Verbose Message: Fehler: Der Wert der Eigenschaft 'unknownFunction' ist Null oder undefiniert, kein Function-Objekt543a6672-9078-452f-93bd-545c4babefd510/14/2011 21:00:37.87 w3wp.exe (0x097C) 0x14DCSharePoint Foundation Unified Logging Service a085Verbose File: ULS%20Logging%20Sample.aspx543a6672-9078-452f-93bd-545c4babefd510/14/2011 21:00:37.87 w3wp.exe (0x097C) 0x14DCSharePoint Foundation Unified Logging Service a086Verbose Line: 676543a6672-9078-452f-93bd-545c4babefd510/14/2011 21:00:37.87 w3wp.exe (0x097C) 0x14DCSharePoint Foundation Unified Logging Service a087Verbose Client: <client><browser name='Internet Explorer' version='8.0'></browser><language>en-us</language></client>543a6672-9078-452f-93bd-545c4babefd510/14/2011 21:00:37.87 w3wp.exe (0x097C) 0x14DCSharePoint Foundation Unified Logging Service a088Verbose Stack: <stack><function depth='0' signature=' doWork() '>function doWork() { unknownFunction(); }</function></stack>543a6672-9078-452f-93bd-545c4babefd510/14/2011 21:00:37.87 w3wp.exe (0x097C) 0x14DCSharePoint Foundation Unified Logging Service a089Verbose TeamName: Simple ULS Logging543a6672-9078-452f-93bd-545c4babefd510/14/2011 21:00:37.87 w3wp.exe (0x097C) 0x14DCSharePoint Foundation Unified Logging Service a08aVerbose OriginalFileName: ULS%20Logging%20Sample.aspx543a6672-9078-452f-93bd-545c4babefd5

    Wenn Sie einen Blick auf die Meldung im Protokoll werfen, erkenenn Sie sofort, dass die Ausnahme auftrat, weil unknownFunction nicht definiert war. Außerdem können Sie andere relevante Details sehen, z. B. die Zeilennummer.

  6. Entsprechend wird die folgende Ablaufverfolgungsmeldung geschrieben, wenn Sie im Inhalts-Editor-Webpart auf Ablaufverfolgung protokollieren klicken:

    10/14/2011 21:29:55.76 w3wp.exe (0x097C) 0x0F6CSharePoint Foundation Unified Logging Service a084Verbose Message: Dies ist eine Ablaufverfolgungsmeldung des CEWP8c182889-c323-46f3-a287-a538c379f15210/14/2011 21:29:55.76 w3wp.exe (0x097C) 0x0F6CSharePoint Foundation Unified Logging Service a085Verbose File: loggingsample.aspx8c182889-c323-46f3-a287-a538c379f15210/14/2011 21:29:55.76 w3wp.exe (0x097C) 0x0F6CSharePoint Foundation Unified Logging Service a086Verbose Line: 08c182889-c323-46f3-a287-a538c379f15210/14/2011 21:29:55.76 w3wp.exe (0x097C) 0x0F6CSharePoint Foundation Unified Logging Service a087Verbose Client: <client><browser name='Internet Explorer' version='8.0'></browser><language>en-us</language></client>8c182889-c323-46f3-a287-a538c379f15210/14/2011 21:29:55.76 w3wp.exe (0x097C) 0x0F6CSharePoint Foundation Unified Logging Service a088Verbose Stack: <stack><function depth='1' signature=' logMessage() '></function></stack>8c182889-c323-46f3-a287-a538c379f15210/14/2011 21:29:55.76 w3wp.exe (0x097C) 0x0F6CSharePoint Foundation Unified Logging Service a089Verbose TeamName: Simple ULS Logging8c182889-c323-46f3-a287-a538c379f15210/14/2011 21:29:55.76 w3wp.exe (0x097C) 0x0F6CSharePoint Foundation Unified Logging Service a08aVerbose OriginalFileName: loggingsample.aspx8c182889-c323-46f3-a287-a538c379f152

    In diesem Protokoll sehen Sie, dass von der logMessage-Funktion eine Ablaufverfolgungsmeldung gesendet wurde.

In einer Lösung mit eingeschränkter Sicherheitsstufe können Sie keine Datei im Serverdateisystem bereitstellen (Ordner Layouts). Daher müssen Sie, damit das Skript für die ULS-Protokollierung funktioniert, die folgenden beiden Änderungen vornehmen:

  1. Stellen Sie die Dateien jquery-1.6.4.min.js und ULSLogScript.js file in einem Formatbibliotheksordner relativ zur Websitesammlung bereit (oder in einer beliebigen anderen Bibliothek mit entsprechendem Lesezugriff).

  2. Aktualisieren Sie je nach Bedarf die Skriptverweise im Consumer-Webpart für Inhaltsabfragen (Content Query Web Part, CQWP).

Die übrigen Funktionen sollten ohne weitere Änderungen korrekt ausgeführt werden.

In diesem Artikel haben Sie erfahren, wie Sie JavaScript konfigurieren und verwenden können, um Einträge im ULS zu erstellen. Die Erklärungen in diesem Artikel sollten Ihnen ermöglicht haben, die Funktionsweise des Diagnostics-Webdiensts zu verstehen und ihn in Ihren benutzerdefinierten JavaScript-Anwendungen zu verwenden.

Anzeigen: