Özel günlük sağlayıcısı kodlama
Gelen devralan bir sınıf oluşturduktan sonra LogProviderBase sınıf temel ve uygulanan DtsLogProviderAttribute öznitelik sınıfı uygulama özelliklerini ve özel iþlevsellik saà taban sınıfın yöntemlerini kılmalıdır.
Özel günlük sağlayıcıların çalışma örnekleri için bkz: Developing a User Interface for a Custom Log Provider ve EmailLogProvider Sample.
günlük sağlayıcısı yapılandırma
Başlatılıyor günlük sağlayıcı
Geçersiz kılıp InitializeLogProvider(Connections, IDTSInfoEvents, ObjectReferenceTracker) bağlantı koleksiyon ve olay arabirim için önbellek başvurular yöntem. Bu önbelleğe alınan başvuruları daha sonra diğer yöntemleri kullanabileceğiniz günlük sağlayıcısı.
YapılandırmaDizesi özelliğini kullanma
Tasarım sırasında saat, yapılandırma bilgilerini bir günlük sağlayıcısı alır Yapılandırma sütun.Bu yapılandırma bilgilerini karşılık gelen ConfigString() günlük sağlayıcısı özellik. Varsayılan olarak, bu sütun, herhangi bir dizeyi bilgi almak, bir metin kutusu içerir.Çoğu bulunan günlüğü sağlayıcıları Integration Services Sağlayıcı, bir dış verilere bağlanmak için kullandığı Bağlantı Yöneticisi'nin adı olarak saklamak için bu özellik kullanmak kaynak. Oturum sağlayıcı kullanan ConfigString() özellik kullanımı Validate(IDTSInfoEvents) yöntem, bu özellik doğrulamak ve bu özelliği doğru olarak ayarlandığından emin olun.
günlük sağlayıcısı doğrulanıyor
Geçersiz kılıp Validate(IDTSInfoEvents) sağlayıcının düzgün yapılandırılmış ve çalıştırılmak üzere hazır olduğundan emin olmak için yöntem. Genellikle, bir minimum doğrulama emin olmak için düzeyidir ConfigString() doğru olarak küme. günlük sağlayıcısı dönünceye kadar yürütme devam edemiyor Success() gelen Validate(IDTSInfoEvents) yöntem.
Aşağıdaki kod örneği uygulaması gösterir. Validate(IDTSInfoEvents) bir Bağlantı Yöneticisi adı belirtilmesini, Bağlantı Yöneticisi içinde bulunduğunu yerleşimlere paket, Bağlantı Yöneticisi, bir dosya adı verir 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ısı persisting
Genellikle özel kalıcı bir Bağlantı Yöneticisi için uygulamanız gerekmez.Bir nesnenin özelliklerini karmaşık veri türleri kullandığınızda özel kalıcılık gereklidir.Daha fazla bilgi için bkz:Özel nesneler için Tümleştirme Hizmetleri geliştirme.
günlük sağlayıcısı ile günlüğe kaydetme
Var olan üç çalışma-saat tüm günlük sağlayıcıları tarafından geçersiz yöntem: OpenLog(), Log(String, String, String, String, String, String, String, DateTime, DateTime, Int32, array<Byte[]), ve CloseLog().
Important Note: |
---|
Doğrulama ve tek bir paket yürütülmesi sırasında OpenLog() ve CloseLog() Yöntem birden çok kez olarak adlandırılır. Özel bir kodunuz önceki günlük girdilerini bir sonraki açılış ve kapanış günlüğünün tarafından üzerine yazılmasına neden olmasına dikkat edin.Sınama paketiniz doğrulama olaylarını günlüğe seçtiyseniz, görmelisiniz, günlüğe kaydedilen olay ilk OnPreValidate; bunun yerine, bkz: ilk günlüğe kaydedilen olay PackageStart, ilk doğrulama olaylarını yazıldığını. |
Oturum açma
Çoğu günlük sağlayıcıları için bir dış veri bağlama kaynak gibi bir dosya veya paket yürütme sırasında toplanan olay bilgilerini depolamak için veritabanı.Ile diğer nesneleri gibi çalışma zamanında, dış veri kaynağına bağlanma genellikle Bağlantı Yöneticisi nesneleri kullanılarak gerçekleştirilir.
The OpenLog() yöntem is called at the start of paket execution.Override this yöntem to establish a connection to the external data kaynak.
Aşağıdaki örnek kod, bir metin dosyasına yazma sırasında için açılan günlük sağlayıcısı gösterir. OpenLog(). Çağırarak dosya açılır AcquireConnection(Object) Bağlantı Yöneticisi, belirtilen yöntem 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(String, String, String, String, String, String, String, DateTime, DateTime, Int32, array<Byte[]) yöntem is called every saat that an object in the paket raises an olay by calling a Fire<olay> yöntem on one of the olay interfaces. Her bir olay, içerik ve genellikle açıklayıcı bir ileti hakkında bilgilerle oluşturulur.Ancak, her arama için Log(String, String, String, String, String, String, String, DateTime, DateTime, Int32, array<Byte[]) yöntem, her Yöntem parametresinin bilgileri içerir. Örneğin, adları büyük/küçük harfe değerleridir bazı standart olayları MessageText sağlamak ve DataCode ve DataBytes isteğe bağlı ek bilgi için düşünülmüştür.
Aşağıdaki örnek ımplements kod Log(String, String, String, String, String, String, String, DateTime, DateTime, Int32, array<Byte[]) yöntem ve yazma olayları için önceki bölümde açılmış akış.
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() yöntem is called at the end of paket execution, after all the objects in the paket have completed execution, or, when the paket stops because of errors.
Aşağıdaki kod örneği uygulaması gösterir CloseLog() dosya akışı sırasında açılmış kapatan yöntemi 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
|
See Also