Udostępnij za pośrednictwem


Kodowanie dostawcę dziennika niestandardowego

Po utworzeniu klasy, która dziedziczy z LogProviderBase Klasa podstawowa i stosowane DtsLogProviderAttribute atrybut do klasy, należy zastąpić wykonania właściwości i metod klasy podstawowej, aby zapewnić funkcje niestandardowe.

Dla próbek pracy dostawców niestandardowych dzienników, zobacz Integration Services próbki na witrynie Codeplex.

Konfigurując dostawcę dziennika

Inicjowanie dostawcy dziennika

Można zastąpić InitializeLogProvider metoda pamięci podręcznej odwołań do kolekcja połączeń i interfejs zdarzenia.Za pomocą tych odwołań buforowanych później w innych metod dostawca dziennika.

Za pomocą właściwości Ciąg_konfiguracji

W projekcie czas, dostawca dziennika odbiera informacje o konfiguracja z konfiguracja kolumna.Odpowiada to informacje o konfiguracja ConfigString Właściwość dostawca dziennika.Domyślnie ta kolumna zawiera pole tekstowe, z którego można pobierać informacje dowolny ciąg znaków.Większość dostawców dziennika z Integration Services za pomocą tej właściwość do przechowywania nazwy menedżer połączeń, który dostawca wykorzystuje się połączyć źródło danych zewnętrznych.Jeśli korzysta się z dostawca dziennika ConfigString Właściwości, należy zastosować Validate metoda sprawdzania poprawności tej właściwości i upewnij się, że właściwość jest zestaw poprawnie.

Sprawdzanie poprawności dostawcę dziennika

Można zastąpić Validate metoda, aby upewnić się, że dostawca został poprawnie skonfigurowany i jest gotowy do wykonania.Zazwyczaj jest minimalny poziom sprawdzania poprawności, aby upewnić się, że ConfigString jest zestaw poprawnie.Nie można kontynuować aż dostawca dziennika zwraca Success z Validate metoda.

Poniższy przykład kodu pokazuje implementację Validate , sprawdza, czy określono nazwę menedżera połączeń, istnienie Menedżera połączeń do pakiet, a Menedżer połączeń zwraca nazwę pliku w ConfigString właściwość.

public override DTSExecResult Validate(IDTSInfoEvents infoEvents)
{
    if (this.ConfigString.Length == 0 || connections.Contains(ConfigString) == false)
    {
        infoEvents.FireError(0, "MyTextLogProvider", "The ConnectionManager " + ConfigString + " specified in the ConfigString property cannot be found in the collection.", "", 0);
        return DTSExecResult.Failure;
    }
    else
    {
        string fileName = connections[ConfigString].AcquireConnection(null) as string;

        if (fileName == null || fileName.Length == 0)
        {
            infoEvents.FireError(0, "MyTextLogProvider", "The ConnectionManager " + ConfigString + " specified in the ConfigString property cannot be found in the collection.", "", 0);
            return DTSExecResult.Failure;
        }
    }
    return DTSExecResult.Success;
}
Public Overrides Function Validate(ByVal infoEvents As IDTSInfoEvents) As DTSExecResult
    If Me.ConfigString.Length = 0 Or connections.Contains(ConfigString) = False Then
        infoEvents.FireError(0, "MyTextLogProvider", "The ConnectionManager " + ConfigString + " specified in the ConfigString property cannot be found in the collection.", "", 0)
        Return DTSExecResult.Failure
    Else 
        Dim fileName As String =  connections(ConfigString).AcquireConnectionCType(as string, Nothing)
 
        If fileName = Nothing Or fileName.Length = 0 Then
            infoEvents.FireError(0, "MyTextLogProvider", "The ConnectionManager " + ConfigString + " specified in the ConfigString property cannot be found in the collection.", "", 0)
            Return DTSExecResult.Failure
        End If
    End If
    Return DTSExecResult.Success
End Function

Utrwalanie dostawcę dziennika

Zazwyczaj nie trzeba implementować niestandardowe trwałości dla menedżer połączeń.Trwałość niestandardowe jest wymagana tylko wtedy, gdy złożone typy danych za pomocą właściwości obiektu.Aby uzyskać więcej informacji, zobacz Projektowanie obiektów niestandardowych dla usług Integration Services.

Rejestrowanie w dzienniku dostawcy

Istnieją trzy Uruchom -czas metody, które muszą zostać zastąpione przez wszystkich dostawców dziennika: OpenLog, Log, and CloseLog.

Ważna informacjaWażne:

Podczas sprawdzania poprawności i wykonanie pojedynczy pakiet OpenLog i CloseLog metody są nazywane więcej niż jeden czas.Upewnij się, że niestandardowy kod nie spowoduje wcześniejsze wpisy dziennika zostaną zastąpione przez następnego otwarcia i zamknięcia dziennika.Jeśli wybrano Rejestruj zdarzenia sprawdzania poprawności w badaniu na pakiet, pierwszy zarejestrowane zdarzenie, które powinny być widoczne jest OnPreValidate; Jeśli zamiast pierwszego zdarzenie zarejestrowane, widoczny jest PackageStart, został zastąpiony zdarzenie wstępnego sprawdzania poprawności.

Otwarcie dziennika

Większość dostawców dziennika połączyć się z zewnętrznego źródło danych, takich jak plik lub bazy danych do przechowywania informacji zdarzenie zebrane podczas wykonywania pakiet.Jak w przypadku innych obiektów w czasie wykonywania, łączenie z danymi zewnętrznymi źródło jest zazwyczaj realizowane za pomocą obiektów menedżer połączeń.

w chwili rozpoczęcia wykonywania pakiet wywoływana jest metodaOpenLog .Zastąpić tę metodę, aby ustanowić połączenie źródło danych zewnętrznych.

Poniższy przykład kodu pokazuje dostawca dziennika, który otwiera plik tekstowy do zapisu podczas OpenLog.Plik zostanie otwarty przez wywołanie AcquireConnection metoda menedżer połączeń, która została określona w ConfigString właściwość.

public override void OpenLog()
{
    if(!this.connections.Contains(this.ConfigString))
        throw new Exception("The ConnectionManager " + this.ConfigString + " does not exist in the Connections collection.");

    this.connectionManager = connections[ConfigString];
    string filePath = this.connectionManager.AcquireConnection(null) as string;

    if(filePath == null || filePath.Length == 0)
        throw new Exception("The ConnectionManager " + this.ConfigString + " is not a valid FILE ConnectionManager");

    //  Create a StreamWriter to append to.
    sw = new StreamWriter(filePath,true);

    sw.WriteLine("Open log" + System.DateTime.Now.ToShortTimeString());
}
Public Overrides  Sub OpenLog()
    If Not Me.connections.Contains(Me.ConfigString) Then
        Throw New Exception("The ConnectionManager " + Me.ConfigString + " does not exist in the Connections collection.")
    End If
 
    Me.connectionManager = connections(ConfigString)
    Dim filePath As String =  Me.connectionManager.AcquireConnectionCType(as string, Nothing)
 
    If filePath = Nothing Or filePath.Length = 0 Then
        Throw New Exception("The ConnectionManager " + Me.ConfigString + " is not a valid FILE ConnectionManager")
    End If
 
    '  Create a StreamWriter to append to.
    sw = New StreamWriter(filePath,True)
 
    sw.WriteLine("Open log" + System.DateTime.Now.ToShortTimeString())
End Sub

Wpisy dziennika pisania

Log Wywoływana jest metoda co czas że obiekt w pakiecie wywołuje zdarzenie wywołując pożaru<zdarzenia> metody na jednym z interfejsów zdarzeń.Każde zdarzenie jest wywoływane z informacji o jego kontekstem zazwyczaj komunikat z wyjaśnieniem.Jednak nie wszystkie wywołania Log Metoda zawiera informacje dla każdego parametru metody.Na przykład niektóre standardowe zdarzenia, których nazwy są oczywiste nie zapewniają MessageText i DataCode i DataBytes są przeznaczone do uzupełniające informacje opcjonalne.

Następujący kod implementuje przykład Log metoda i zapisy zdarzeń do strumienia, który został otwarty w poprzedniej sekcji.

public override void Log(string logEntryName, string computerName, string operatorName, string sourceName, string sourceID, string executionID, string messageText, DateTime startTime, DateTime endTime, int dataCode, byte[] dataBytes)
{
    sw.Write(logEntryName + ",");
    sw.Write(computerName + ",");
    sw.Write(operatorName + ",");
    sw.Write(sourceName + ",");
    sw.Write(sourceID + ",");
    sw.Write(messageText + ",");
    sw.Write(dataBytes + ",");
    sw.WriteLine("");
}
Public Overrides  Sub Log(ByVal logEnTryName As String, ByVal computerName As String, ByVal operatorName As String, ByVal sourceName As String, ByVal sourceID As String, ByVal executionID As String, ByVal messageText As String, ByVal startTime As DateTime, ByVal endTime As DateTime, ByVal dataCode As Integer, ByVal dataBytes() As Byte)
    sw.Write(logEnTryName + ",")
    sw.Write(computerName + ",")
    sw.Write(operatorName + ",")
    sw.Write(sourceName + ",")
    sw.Write(sourceID + ",")
    sw.Write(messageText + ",")
    sw.Write(dataBytes + ",")
    sw.WriteLine("")
End Sub

Zamknięcie dziennika

CloseLog Wywoływana metoda na końcu wykonanie pakiet po wszystkich obiektów w pakiecie Ukończono wykonywanie, lub po zatrzymaniu pakiet z powodu błędów.

Poniższy przykład kodu pokazuje implementację CloseLog metoda, która zamyka strumienia pliku, który został otwarty podczas OpenLog metoda.

public override void CloseLog()
{
    if (sw != null)
    {
        sw.WriteLine("Close log" + System.DateTime.Now.ToShortTimeString());
        sw.Close();
    }
}
Public Overrides  Sub CloseLog()
    If Not sw Is Nothing Then
        sw.WriteLine("Close log" + System.DateTime.Now.ToShortTimeString())
        sw.Close()
    End If
End Sub
Ikona usług Integration Services (mała)Bieżąco z usług integracji

Najnowsze pliki do pobrania, artykuły, próbki i wideo firmy Microsoft, jak również wybranych rozwiązań ze Wspólnoty, odwiedź witrynę Integration Services strona na MSDN i TechNet:

Aby otrzymywać automatyczne powiadomienia dotyczące tych aktualizacji, zasubskrybuj źródła danych RSS dostępne na tej stronie.