Aracılığıyla paylaş


Ö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 noteImportant 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
Integration Services icon (small) Tümleştirme Hizmetleri ile güncel kalın

Karşıdan yüklemeler, makaleleri, örnekler ve en son Microsoft video yanı sıra, seçili topluluğun çözümleri için ziyaret Integration Services sayfa MSDN veya TechNet:

Bu güncelleştirmelerin otomatik bildirim için kullanılabilir RSS akışlarına abone olmak sayfa.