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ż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
|
Zobacz także