Mengapa sebagian besar contoh log4net mendapatkan logger untuk kelas dengan melakukan ini:
private static ILog logger =
LogManager.GetLogger(
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Daripada hanya meneruskan typeof (MyClass):
private static ILog logger = LogManager.GetLogger(typeof(MyClass));
Apakah ada alasan lain untuk melakukan ini, selain fakta bahwa opsi pertama tidak mengharuskan Anda mengetik nama kelas tertentu?
Saya adalah pengguna NLog, dan biasanya intinya adalah:
Tampaknya agak aneh bahwa Anda perlu melakukan refleksi di Log4Net, jadi saya melihat kode sumber NLog, dan lihatlah, inilah yang mereka lakukan untuk Anda:
Saya kira saya akan menulis sesuatu yang serupa untuk Log4Net sebagai ekstensi atau metode statis daripada menempelkan refleksi sebagai bagian dari kode boiler saya :)
sumber
Seperti yang Anda katakan - nyaman karena Anda dapat membuat logger dalam metode tanpa mengetahui nama kelas (sepele saya tahu) tetapi memungkinkan Anda untuk memotong dan menempelkan metode antar kelas tanpa harus mengganti nama panggilan.
sumber
Saya pikir alasannya adalah, bahwa Anda mendapatkan jenis tipe runtime menggunakan
.DeclaringType()
metode ini. Anda dapat menggunakan pencatat di kelas dasar dan masih melihat jenis objek Anda yang sebenarnya di keluaran pencatat. Itu membuat penyelidikan jauh lebih nyaman.sumber
Ini juga mempermudah pembuatan template Codesmith untuk tujuan pembuatan kode.
sumber