Özel günlük sağlayıcısı kodlama
Dan devralan bir sınıf oluşturduktan sonra LogProviderBase taban sınıfı ve uygulanan DtsLogProviderAttribute öznitelik sınıfa uygulaması özellikleri ve özel bir işlevi bilgisayarınızın. sağlamak için temel sınıfı yöntemleri kılmalıdır
Özel günlük sağlayıcıları çalışma örnekleri için bkz: Integration Services örnekleri üzerinde Codeplex.
Günlük sağlayıcı yapılandırma
Günlük sağlayıcı başlatılıyor
Geçersiz kılma, InitializeLogProvider bağlantılar için önbellek başvurular yöntem koleksiyon ve olayları arabirim.günlük sağlayıcı daha sonra diğer yöntemlerle bu önbelleğe alınan başvuruları kullanabilirsiniz.
YapılandırmaDizesi özelliği kullanılarak
Tasarım sırasında saat, günlük sağlayıcını yapılandırma bilgilerini alır yapılandırma sütun.Bu yapılandırma bilgilerini karşılık gelen ConfigString özellik, günlük sağlayıcı.Varsayılan olarak, bu sütun bir metin kutusu içinden getirebileceðiniz herhangi bir dize bilgi içerir.Çoğu günlük sağlayıcıları ile birlikte verilen Integration Services sağlayıcı bir dış veri kaynağına bağlanmak için kullandığı Bağlantı Yöneticisi adını depolamak için bu özellik kullanın kaynak.Günlük sağlayıcınız kullanıyorsa, ConfigString özellik, kullanım Validate özellik olduğundan emin olun ve bu özellikni validate yöntem küme doğru.
Günlük sağlayıcı doğrulanıyor
Geçersiz kılma, Validate yöntem sağlayıcı düzgün yapılandırılmış ve yürütme için hazır olduğundan emin olmak için.Tipik olarak, emin olmak için doğrulama asgari düzeyde olduğu ConfigString olan küme doğru.günlük sağlayıcı dönünceye kadar yürütme devam edemiyor Success dan Validate yöntem.
Aşağıdaki kod örneği uygulaması gösterir Validate Bağlantı Yöneticisi adı belirtilirse, Bağlantı Yöneticisi ' nde bulunmaktadır emin kılar paket, Bağlantı Yöneticisi, bir dosya adı verir ve ConfigString özellik.
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
Günlük sağlayıcı kalıcı yapma
Normalde, Bağlantı Yöneticisi için özel Kalıcılık uygulamak zorunda değildir.Özel Kalıcılık, nesnenin özelliklerini karmaşık veri türlerini kullandığınızda gereklidir.Daha fazla bilgi için bkz: Tümleştirme Hizmetleri için Özel Nesneler Geliştirme.
Günlük sağlayıcı ile günlüğü
Vardır üç çalışma -saat tüm günlük sağlayıcıları tarafından geçersiz kılınması gereken yöntemleri: OpenLog, Log, and CloseLog.
![]() |
---|
Doğrulama ve tek paket yürütme sırasında OpenLog ve CloseLog yöntemleri çaðrýlýr birden fazla saat.Özel kodunuzu sonraki açýlýþ ve kapanýþ günlüğü tarafından yazılmasını eski günlük girişleri neden olduğundan emin olun.İçinde sizin test doğrulama olaylarını günlüğe seçtiyseniz, paket, OnPreValidate; görmeniz gerekir ilk günlüğe kaydedilen olay olduğu Gördüğünüz ilk günlüğe kaydedilen olay PackageStart ise, ilk doğrulama olayları üzerine yazıldı. |
Oturum açma
Çoğu günlüğü sağlayıcılarını bir dış veri kaynağına bağlanmak kaynak, bir dosya veya veritabanı paket yürütme sırasında toplanan olay bilgilerini depolamak için gibi.Başka bir nesneyle gibi çalışma zamanında ile dış verilere bağlanma kaynak genellikle Bağlantı Yöneticisi nesneleri kullanılarak gerçekleştirilir.
The OpenLog method is called at the start of package execution.Override this method to establish a connection to the external data source.
Aşağıdaki örnek kod yazma sırasında bir metin dosyasını açar, bir günlük sağlayıcı gösterir OpenLog.Çağırarak dosyayı açar AcquireConnection yöntem, belirtilen Bağlantı Yöneticisi'ni, ConfigString özellik.
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
Yazma Kütüğü Girişleri
The Log method is called every time that an object in the package raises an event by calling a Fire<event> method on one of the event interfaces.Her olay, onun içeriği ve genellikle açıklayıcı bir mesaj hakkında bilgilerle oluşturulur.Ancak, yapılan her çağrı Log yöntem içeren bilgi için her yöntem parametresi.Örneğin, adları geri döndürülebilir standart bazı olayları ileti metni sağlamak ve DataCode ve DataBytes için isteğe bağlı ek bilgiler düşünülmüştür.
Aşağıdaki kod örneği Implements Log yöntem ve olayları akışına önceki bölümde açılmış olan yazma
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
Günlüğü kapatma
The CloseLog method is called at the end of package execution, after all the objects in the package have completed execution, or, when the package stops because of errors.
Aşağıdaki kod örneği uygulaması gösterilmiştir CloseLog sırasında açılan dosya akışı kapatır yöntem OpenLog yöntem.
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
|
Ayrıca bkz.