Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
SSIS Integration Runtime v rámci Azure Data Factory
Poté, co vytvoříte třídu, která dědí ze základní třídy LogProviderBase , a aplikujete DtsLogProviderAttribute atribut na tuto třídu, musíte přepsat implementaci vlastností a metod základní třídy, abyste poskytli vlastní funkcionalitu.
Pro pracovní ukázky vlastních poskytovatelů logů viz Vývoj uživatelského rozhraní pro vlastního poskytovatele logů.
Konfigurace poskytovatele logů
Inicializace poskytovatele logů
Přepisujete metodu InitializeLogProvider a ukládáte odkazy na sbírku spojení a rozhraní událostí. Tyto cacheované odkazy můžete později použít i v jiných metodách poskytovatele logů.
Použití vlastnosti ConfigString
Při návrhu poskytovatel logů obdrží konfigurační informace ze sloupce Konfigurace . Tyto konfigurační informace odpovídají ConfigString vlastnosti poskytovatele logu. Ve výchozím nastavení tento sloupec obsahuje textové pole, ze kterého můžete získat informace o řetězci. Většina poskytovatelů logů zahrnutých v integračních službách používá tuto vlastnost k uložení názvu správce připojení, který poskytovatel používá k připojení k externímu datovému zdroji. Pokud váš poskytovatel logů tuto vlastnost ConfigString používá, použijte tuto metodu Validate k ověření této vlastnosti a ujistěte se, že je správně nastavena.
Ověřování poskytovatele logů
Přepisujete metodu Validate , abyste se ujistili, že poskytovatel byl správně nakonfigurován a připraven k vykonání. Typicky je minimální úroveň ověření zajištění, že je správně nastaveno ConfigString . Provádění nemůže pokračovat, dokud poskytovatel logu nevrátí Success z metody Validate .
Následující příklad kódu ukazuje implementaci Validate , která zajišťuje, že je specifikováno jméno správce spojení, že správce spojení existuje v balíčku a že správce spojení vrací název souboru ve ConfigString vlastnosti.
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
Uchovávání poskytovatele logů
Obvykle není nutné implementovat vlastní perzistenci pro správce spojení. Vlastní perzistence je vyžadována pouze tehdy, když vlastnosti objektu používají složité datové typy. Pro více informací viz Vývoj vlastních objektů pro integrační služby.
Logování s poskytovatelem logů
Existují tři metody za běhu, které musí být přepsány všemi poskytovateli logů: OpenLog, Log, a CloseLog.
Important
Během validace a spuštění jednoho balíčku jsou metody a CloseLog volány OpenLog vícekrát. Ujistěte se, že váš vlastní kód nezpůsobí, že by dřívější záznamy v logu byly přepsány při dalším otevření a zavírání logu. Pokud jste zvolili zaznamenávat validační události ve svém testovacím balíčku, první zaznamenanou událostí, kterou byste měli vidět, je OnPreValidate; pokud je místo toho první zaznamenanou událostí, kterou vidíte, PackageStart, byly počáteční validační události přepsány.
Otevírání klády
Většina poskytovatelů logů se připojuje k externímu datovému zdroji, jako je soubor nebo databáze, aby uložila informace o událostech shromážděných během spuštění balíčku. Stejně jako u jakéhokoli jiného objektu v běhu se připojení k externímu datovému zdroji obvykle provádí pomocí objektů správce spojení.
Metoda OpenLog se volá na začátku spuštění balíčku. Tuto metodu přepsejte a navázáte spojení s externím datovým zdrojem.
Následující ukázkový kód ukazuje poskytovatele logů, který během . OpenLogotevírá textový soubor pro zápis . Soubor se otevře vyvoláním AcquireConnection metody správce spojení, která byla specifikována ve ConfigString vlastnosti.
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
Psaní záznamů v deníku
Metoda Log se volá pokaždé, když objekt v balíčku vyvolá událost, vyvolání metody události> Fire<na jednom z rozhraní událostí. Každá událost je vyvolána s informacemi o svém kontextu a obvykle s vysvětlujícím poselstvím. Nicméně ne každé volání Log metody obsahuje informace pro každý parametr metody. Například některé standardní události, jejichž názvy jsou samozřejmé, neposkytují MessageText a DataCode a DataBytes jsou určeny jako volitelné doplňkové informace.
Následující příklad kódu implementuje Log metodu a zapisuje události do proudu, který byl otevřen v předchozí sekci.
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
Uzavření klády
Metoda CloseLog se volá na konci spuštění balíčku, poté co všechny objekty v balíčku dokončily vykonání, nebo když se balíček zastaví kvůli chybám.
Následující příklad kódu ukazuje implementaci metody CloseLog , která uzavírá souborový tok otevřený během této metody OpenLog .
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