Share via


Ö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 notÖ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
Integration Services simgesi (küçük) Integration Services ile güncel kalın

En son karşıdan yüklemeler, makaleler, örnekler ve Microsoft video yanı sıra topluluk seçili çözümleri için ziyaret Integration ServicesMSDN sayfası:


Bu güncelleştirmelerle ilgili otomatik bildirim almak için, sayfadaki RSS akışlarına abone olun.

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