Mengodekan Penyedia Log Kustom

Berlaku untuk: SQL Server (semua versi yang didukung) Integration Runtime SSIS di Azure Data Factory

Setelah Anda membuat kelas yang mewarisi dari LogProviderBase kelas dasar, dan menerapkan DtsLogProviderAttribute atribut ke kelas , Anda harus mengambil alih implementasi properti dan metode kelas dasar untuk menyediakan fungsionalitas kustom Anda.

Untuk sampel penyedia log kustom yang berfungsi, lihat Mengembangkan Antarmuka Pengguna untuk Penyedia Log Kustom.

Mengonfigurasi Penyedia Log

Menginisialisasi Penyedia Log

Anda mengambil alih InitializeLogProvider metode untuk menyimpan referensi ke koleksi koneksi dan antarmuka peristiwa. Anda dapat menggunakan referensi cache ini nanti di metode lain dari penyedia log.

Menggunakan Properti ConfigString

Pada waktu desain, penyedia log menerima informasi konfigurasi dari kolom Konfigurasi . Informasi konfigurasi ini sesuai dengan ConfigString properti penyedia log. Secara default, kolom ini berisi kotak teks tempat Anda dapat mengambil informasi string apa pun. Sebagian besar penyedia log yang disertakan dengan Layanan Integrasi menggunakan properti ini untuk menyimpan nama manajer koneksi yang digunakan penyedia untuk menyambungkan ke sumber data eksternal. Jika penyedia log Anda menggunakan ConfigString properti , gunakan Validate metode untuk memvalidasi properti ini dan pastikan bahwa properti diatur dengan benar.

Memvalidasi Penyedia Log

Anda mengambil alih Validate metode untuk memastikan bahwa penyedia telah dikonfigurasi dengan benar dan siap untuk eksekusi. Biasanya, tingkat validasi minimum adalah memastikan bahwa ConfigString diatur dengan benar. Eksekusi tidak dapat dilanjutkan sampai penyedia log kembali Success dari Validate metode .

Contoh kode berikut menunjukkan implementasi Validate yang memastikan bahwa nama nama manajer koneksi ditentukan, bahwa manajer koneksi ada dalam paket, dan bahwa manajer koneksi mengembalikan nama file di ConfigString properti .

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  

Mempertahankan Penyedia Log

Biasanya Anda tidak perlu menerapkan persistensi kustom untuk manajer koneksi. Persistensi kustom hanya diperlukan saat properti objek menggunakan jenis data yang kompleks. Untuk informasi selengkapnya, lihat Mengembangkan Objek Kustom untuk Layanan Integrasi.

Pengelogan dengan Penyedia Log

Ada tiga metode run-time yang harus ditimpa oleh semua penyedia log: OpenLog, , Logdan CloseLog.

Penting

Selama validasi dan eksekusi satu paket, OpenLog metode dan CloseLog dipanggil lebih dari satu kali. Pastikan bahwa kode kustom Anda tidak menyebabkan entri log sebelumnya ditimpa oleh pembukaan dan penutupan log berikutnya. Jika Anda telah memilih untuk mencatat peristiwa validasi dalam paket pengujian Anda, peristiwa pertama yang dicatat yang akan Anda lihat adalah OnPreValidate; jika sebaliknya peristiwa pertama yang Anda lihat adalah PackageStart, peristiwa validasi awal telah ditimpa.

Membuka Log

Sebagian besar penyedia log tersambung ke sumber data eksternal, seperti file atau database, untuk menyimpan informasi peristiwa yang dikumpulkan selama eksekusi paket. Seperti halnya objek lain dalam runtime, menyambungkan ke sumber data eksternal biasanya dilakukan dengan menggunakan objek pengelola koneksi.

Metode OpenLog ini dipanggil pada awal eksekusi paket. Ambil alih metode ini untuk membuat koneksi ke sumber data eksternal.

Contoh kode berikut menunjukkan penyedia log yang membuka file teks untuk ditulis selama OpenLog. Ini membuka file dengan memanggil AcquireConnection metode manajer koneksi yang ditentukan dalam ConfigString properti .

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  

Menulis Entri Log

Metode Log ini dipanggil setiap kali objek dalam paket memunculkan peristiwa dengan memanggil metode peristiwa> Fire<pada salah satu antarmuka peristiwa. Setiap peristiwa dimunculkan dengan informasi tentang konteksnya dan biasanya pesan penjelasan. Namun, tidak setiap panggilan ke Log metode mencakup informasi untuk setiap parameter metode. Misalnya, beberapa peristiwa standar yang namanya jelas sendiri tidak menyediakan MessageText, dan DataCode dan DataBytes ditujukan untuk informasi tambahan opsional.

Contoh kode berikut mengimplementasikan Log metode , dan menulis peristiwa ke aliran yang dibuka di bagian sebelumnya.

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  

Menutup Log

Metode CloseLog ini dipanggil pada akhir eksekusi paket, setelah semua objek dalam paket telah selesai dieksekusi, atau, ketika paket berhenti karena kesalahan.

Contoh kode berikut menunjukkan implementasi CloseLog metode yang menutup aliran file yang dibuka selama OpenLog metode .

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  

Lihat juga

Membuat Penyedia Log Kustom
Mengembangkan Antarmuka Pengguna untuk Penyedia Log Kustom