Özel günlük sağlayıcısı kodlama
Dan devralan bir sınıf oluşturduktan sonra LogProviderBasetemel sınıf ve uygulanan DtsLogProviderAttributeözniteliği sınıfa uygulaması özellikleri ve yöntemleri, özel işlevsellik sağlamak için temel sınıf geçersiz kılmalısınız.
Özel günlük sağlayıcıları çalışma örnekleri için bkz: Developing a User Interface for a Custom Log Providerve EmailLogProvider Sample.
Günlük sağlayıcı yapılandırma
Günlük sağlayıcı başlatılıyor
Eğer geçersiz InitializeLogProviderbaşvuruları için Bağlantılar koleksiyonu ve olayları arabirimi yöntemi. Bu önbelleğe alınan başvurular günlük sağlayıcı daha sonra diğer yöntemleri kullanabilirsiniz.
YapılandırmaDizesi özelliği kullanma
Tasarım zamanında bir günlük sağlayıcı yapılandırma bilgilerini alır yapılandırma sütun. Bu yapılandırma bilgilerini karşılık ConfigStringözelliği günlük sağlayıcı. Varsayılan olarak, bu sütun içinden herhangi bir dize bilgi alabilirsiniz metin kutusu içerir. Birlikte günlüğü sağlayıcılarını en Integration ServicesSağlayıcı bir dış veri kaynağına bağlanmak için kullandığı bağlantı Yöneticisi adını depolamak için bu özelliği kullanın. Günlük sağlayıcısı kullanıyorsa, ConfigStringözelliği, kullanım Validateyöntem doğrulamak bu özellik ve özelliğin doğru ayarlandığından emin olun.
Günlük sağlayıcı doğrulanıyor
Eğer geçersiz Validateyöntem sağlayıcısı düzgün yapılandırılmış ve yürütme için hazır olduğundan emin olun. Tipik olarak, emin olmak için doğrulama minimum düzeyde olduğunu ConfigStringdoğru. Günlük sağlayıcı dönene kadar yürütme devam edemiyor Successdan Validateyöntemi.
Aşağıdaki kod örneği uygulaması gösterir Validatebir bağlantı Yöneticisi adı belirtilirse, Bağlantı Yöneticisi pakette bulunduğundan emin yapar ve 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 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
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ı persisting
Normalde bir bağlantı Yöneticisi özel kalıcılık uygulamak gerekmez. Özel kalıcılık, bir nesnenin özelliklerini karmaşık veri türlerini kullandığınızda gereklidir. Daha fazla bilgi için, bkz. Tümleştirme Hizmetleri özel nesne geliştirme.
Günlük sağlayıcı günlüğü
Tüm günlük sağlayıcıları tarafından kılınması gerekir üç çalıştırma yöntemi vardır: OpenLog, Log, ve CloseLog.
Önemli |
---|
Doğrulama ve tek bir paket yürütme sırasında OpenLogve CloseLogYöntem birden çok kez denir. Özel kodunuzu sonraki açılış ve kapanış günlük tarafından üzerine eski günlük girişleri neden olmaz emin olun. Sınama paketinize doğrulama olaylarını günlüğe seçtiyseniz, sen-meli görmek ilk günlüğe kaydedilen olay OnPreValidate olduğunu; Gördüğünüz ilk günlüğe kaydedilen olay yerine PackageStart ise, ilk doğrulama olayları üzerine. |
Oturum açma
Çoğu günlük sağlayıcıları dosya veya paketi yürütme sırasında toplanan olay bilgileri depolamak için veritabanı gibi bir dış veri kaynağına bağlanın. İle diğer nesneleri olarak çalışma zamanı, dış veri kaynağına bağlanmak genelde Bağlantı Yöneticisi nesnesi kullanılarak gerçekleştirilir.
OpenLogYöntemi, paketi yürütme başında denir.Dış veri kaynağına bir bağlantı kurmak için bu yöntemi geçersiz.
Aşağıdaki örnek kodu bir metin dosyasına yazma sırasında açılan günlük sağlayıcı gösterir OpenLog. Arayarak dosyayı açar AcquireConnectionyöntemi belirtilen bağlantı Yöneticisi 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 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
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
LogYöntemi her zaman nesne paketi yangın çağırarak olay yükseltir denir<olay > yöntemi bir olay arabirimlerinin. Her olay, onun içeriği ve genellikle açıklayıcı bir ileti hakkında bilgi oluşturulur. Ancak, her çağrı Logyöntemi içeren bilgi için her yöntemi parametre. Örneğin, bazı standart olay adları genellikle açıklayıcı not provide MessageText ve DataCode ve DataBytes için isteğe bağlı ek bilgiler düşünülmüştür.
Aşağıdaki kod örneği Implements Logyöntemi ve yazıyor önceki bölümde açılmış akış olaylarını.
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 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
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
CloseLogYöntemi, paketi yürütme sonunda denir, paketin içindeki tüm nesneleri yürütme tamamladıktan sonra veya paket hatalar nedeniyle durduğunda.
Aşağıdaki kod örneği gösterilmiştir CloseLogdosya akışı sırasında açılan kapatır yöntemi OpenLogyöntemi.
public override void CloseLog()
{
if (sw != null)
{
sw.WriteLine("Close log" + System.DateTime.Now.ToShortTimeString());
sw.Close();
}
}
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
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.
Görevler
Özel günlük sağlayıcısı oluşturma
Kavramlar
Özel günlük sağlayıcısı için bir kullanıcı arabirimi geliştirme