Saya ingin menambahkan logging ke aplikasi yang sedang saya kerjakan. Saya telah menambahkan logging sebelumnya, itu bukan masalah di sini.
Tetapi dari perspektif desain dalam bahasa berorientasi objek, apa praktik terbaik untuk logging yang mengikuti OOP dan pola?
Catatan: Saat ini saya melakukan ini dalam C #, jadi contoh dalam C # dipersilahkan. Saya juga ingin melihat contoh di Jawa dan Ruby.
Sunting: Saya menggunakan log4net. Saya hanya tidak tahu apa cara terbaik untuk memasangnya.
sumber
Karena Anda melakukan ini dalam C #, saya akan merekomendasikan Anda melihat NLog dan ElMAH. Mereka dapat SANGAT mudah diinstal menggunakan NUGET. Saya telah menaruh beberapa tautan ke tautan di bawah sehingga Anda dapat memperoleh lebih banyak info.
sumber
Secara pribadi, saya mengambil kerangka pilihan logging (dalam kasus saya, Entlib karena saya bekerja dengan .NET) dan menulis aspek AOP untuk logging.
Anda kemudian dapat mengaitkan metode / properti / kelas / namespaces dan menambahkan logging ke mereka tanpa mengacaukan sumbernya.
sumber
Sistem yang sedang saya kerjakan menggunakan arsitektur dan pesan yang digerakkan oleh peristiwa, sehingga sebagian besar tindakan dalam sistem kami adalah hasil dari suatu perintah dan hasilnya adalah acara (seperti kelas DTO yang dikirim, bukan acara delegasi standar). Kami melampirkan penangan acara yang tujuan utamanya adalah menangani pencatatan. Desain ini membantu kita untuk tidak mengulangi diri kita sendiri, dan juga tidak perlu memodifikasi kode yang ada untuk menambah / mengubah fungsionalitas.
Berikut adalah contoh dari salah satu kelas logging tersebut, yang menangani semua peristiwa yang akan dicatat dari bagian sempit aplikasi kami (yang berhubungan dengan satu sumber konten tertentu yang kami impor).
Saya tidak akan serta merta mengatakan ini adalah praktik terbaik, karena saya tampaknya berubah pikiran tentang apa dan bagaimana cara mencatat sering - dan setiap kali saya perlu menggunakan log untuk mendiagnosis masalah, saya pasti menemukan cara untuk melakukan perbaikan pada informasi yang saya rekam.
Saya akan mengatakan, bahwa merekam informasi yang bersangkutan (terutama dalam cara Ctrl-F / findableable) adalah bagian yang paling penting.
Bagian terpenting kedua adalah menjauhkan kode logging dari logika utama Anda - itu dapat membuat metode jelek dan panjang dan berbelit-belit dengan sangat cepat.
sumber
Seperti yang orang lain katakan, gunakan
log4j
ataulog4net
atau kerangka kerja logging lainnya yang dibangun dengan baik.Saya cenderung sangat tidak suka kode logging menghalangi logika bisnis. Itu sebabnya saya gunakan
Log4PostSharp
. Itu berarti saya bisa menggunakan Pemrograman Berorientasi Aspek untuk menjelaskan metode seperti ini:Atau setiap metode dalam perakitan seperti ini:
sumber
Saya tidak yakin apakah ada kerangka kerja yang melakukan hal ini, tetapi dari perspektif desain, saya akan memodelkan informasi yang perlu dimasukkan ke dalam tiga kategori utama:
Untuk dua kategori pertama, kerangka penebangan ideal saya harus menanganinya sebagai proses pembuatan pos dan transparan bagi pengembang. Akan lebih baik jika secara deklaratif menambahkan logging ke majelis, seperti berikut ini:
Untuk kategori ke-3, programmer hanya bisa membuat satu atau lebih metode "logging" khusus dan memanfaatkan penelusuran untuk kategori pertama. Metode logging tidak lebih dari melayani titik rintisan di mana aturan penelusuran dapat diterapkan.
sumber