Protokollieren und Definieren von Protokolleinträgen in einer Datenflusskomponente

Gilt für:SQL Server SSIS Integration Runtime in Azure Data Factory

Benutzerdefinierte Datenflusskomponenten können mithilfe der PostLogMessage-Methode der IDTSComponentMetaData100-Schnittstelle Nachrichten an einen vorhandenen Protokolleintrag senden. Darüber hinaus können sie auch mithilfe der FireInformation-Methode oder ähnlichen Methoden der IDTSComponentMetaData100-Schnittstelle Informationen für den Benutzer anzeigen. Bei dieser Vorgehensweise entsteht jedoch durch das Auslösen und Behandeln zusätzlicher Ereignisse Arbeitsaufwand, und die Benutzer sind dazu gezwungen, ausführliche Informationsmeldungen zu durchsuchen, um schließlich zu den für sie relevanten Nachrichten zu gelangen. Um für die Benutzer Ihrer Komponente benutzerdefinierte Protokollinformationen mit einer eindeutigen Bezeichnung bereitzustellen, können Sie, wie nachstehend beschrieben, einen benutzerdefinierten Protokolleintrag verwenden.

Registrieren und Verwenden eines benutzerdefinierten Protokolleintrags

Registrieren eines benutzerdefinierten Protokolleintrags

Um einen benutzerdefinierten Protokolleintrag für die Verwendung durch Ihre Komponente zu registrieren, überschreiben Sie die RegisterLogEntries-Methode der PipelineComponent-Basisklasse. Im folgenden Beispiel wird ein benutzerdefinierter Protokolleintrag registriert und ein Name sowie eine Beschreibung bereitgestellt.

using Microsoft.SqlServer.Dts.Runtime;  
...  
private const string MyLogEntryName = "My Custom Component Log Entry";  
private const string MyLogEntryDescription = "Log entry from My Custom Component ";  
...  
    public override void RegisterLogEntries()  
    {  
      this.LogEntryInfos.Add(MyLogEntryName,  
        MyLogEntryDescription,  
        Microsoft.SqlServer.Dts.Runtime.Wrapper.DTSLogEntryFrequency.DTSLEF_CONSISTENT);  
    }  
Imports Microsoft.SqlServer.Dts.Runtime  
...  
Private Const MyLogEntryName As String = "My Custom Component Log Entry"   
Private Const MyLogEntryDescription As String = "Log entry from My Custom Component "  
...  
Public  Overrides Sub RegisterLogEntries()   
  Me.LogEntryInfos.Add(MyLogEntryName, _  
    MyLogEntryDescription, _  
    Microsoft.SqlServer.Dts.Runtime.Wrapper.DTSLogEntryFrequency.DTSLEF_CONSISTENT)   
End Sub  

Die DTSLogEntryFrequency-Enumeration stellt einen Hinweis für die Laufzeit bereit, wie häufig das Ereignis protokolliert wird:

  • DTSLEF_OCCASIONAL: Ereignis wird nur manchmal protokolliert, nicht während jeder Ausführung.

  • DTSLEF_CONSISTENT: Ereignis wird während jeder Ausführung mit konstanter Häufigkeit protokolliert.

  • DTSLEF_PROPORTIONAL: Ereignis wird mit einer zur fertiggestellten Menge der Arbeit proportionalen Häufigkeit protokolliert.

Das oben stehende Beispiel verwendet DTSLEF_CONSISTENT, da die Komponente erwartet, jeweils einen Eintrag pro Ausführung zu protokollieren.

Nach der Registrierung des benutzerdefinierten Protokolleintrags und dem Hinzufügen einer Instanz Ihrer benutzerdefinierten Komponente zur Oberfläche des Datenfluss-Designers zeigt das Dialogfeld Protokollierung im Designer einen neuen Protokolleintrag mit dem Namen „My Custom Component Log Entry“ (Protokolleintrag meiner benutzerdefinierten Komponente) in der Liste der verfügbaren Protokolleinträge an.

Protokollieren eines benutzerdefinierten Protokolleintrags

Nach der Registrierung des benutzerdefinierten Protokolleintrags kann die Komponente jetzt benutzerdefinierte Meldungen protokollieren. Das folgende Beispiel schreibt während der PreExecute-Methode, die den Text einer von der Komponente verwendeten SQL-Anweisung enthält, einen benutzerdefinierten Protokolleintrag.

public override void PreExecute()  
{  
  DateTime now = DateTime.Now;  
  byte[] additionalData = null;  
  this.ComponentMetaData.PostLogMessage(MyLogEntryName,  
    this.ComponentMetaData.Name,  
    "Command Sent was: " + myCommand.CommandText,  
    now, now, 0, ref additionalData);  
}  
Public  Overrides Sub PreExecute()   
  Dim now As DateTime = DateTime.Now   
  Dim additionalData As Byte() = Nothing   
  Me.ComponentMetaData.PostLogMessage(MyLogEntryName, _  
    Me.ComponentMetaData.Name, _  
    "Command Sent was: " + myCommand.CommandText, _  
    now, now, 0, additionalData)   
End Sub  

Wenn der Benutzer nun das Paket ausführt, nachdem er im Dialogfeld Protokollierung den Protokolleintrag "Meine benutzerdefinierte Komponente" ausgewählt hat, enthält das Protokoll einen Eintrag, der eindeutig als "Benutzer::Meine benutzerdefinierte Komponente Protokolleintrag" bezeichnet ist. Dieser neue Protokolleintrag enthält den Text der SQL-Anweisung, den Zeitstempel und alle weiteren vom Entwickler protokollierten Daten.

Weitere Informationen

Integration Services-Protokollierung (SSIS)