Pola desain mana yang lebih cocok untuk logging?

10

Saya harus mencatat beberapa peristiwa dalam suatu program tetapi sejauh yang saya tahu akan lebih baik untuk menyimpan kode logging di luar program karena ini bukan tentang fungsionalitas sebenarnya dari program. Jadi dapatkah Anda memberi tahu saya jika saya harus menyimpannya sepenuhnya di luar kode dan hanya menggunakan Pengamat dan Pendengar untuk mencatat acara? Atau saya dapat menambahkan sederet kode seperti berikut ini di mana pun saya perlu mencatat sesuatu:

MyGloriousLogger.getXXXLogger().Log(LogPlace, new LogObject(z1, z2, z3, z4, ..., z99));

Apakah saya membuat kesalahan untuk menggunakan pola desain Pengamat? Saya perlu pola desain lain? Atau saya harus berhenti memikirkan pola desain?

PS1. Jika saya ingin login hanya menggunakan pendengar dan pengamat saya tentu perlu menambahkan dan meningkatkan pengamat dan pendengar program.

PS2. Saya tentu tahu bahwa ada berbagai pustaka untuk login di Jawa dan saya menggunakan java.utils.logging tetapi saya perlu memiliki pembungkus untuk itu untuk mencatat objek khusus saya.

pengguna1892555
sumber
2
Java sudah memiliki 17 kerangka kerja logging dan kerangka kerja meta-logging (slf4j) dan mungkin beberapa kerangka kerja meta-logging dan tidak ada yang bekerja untuk Anda?
kevin cline

Jawaban:

15

Loggingbiasanya diimplementasikan dengan pola Rantai tanggung jawab . Tentu saja Anda dapat (dan saya akan) menggabungkannya dengan Facade . Saya benar-benar tidak akan menggunakan Pendengar atau Pengamat sendiri.

Rantai tanggung jawab - Pencatat

Elliott Frisch
sumber
Apakah ini pada dasarnya mengatakan "tulis ke logger abstrak Anda di kode Anda"? Saya kira pertanyaan saya adalah: haruskah saya memicu peristiwa dari tempat saya ingin mencatat dan menyediakan pendengar yang mencatat dalam menanggapi peristiwa, atau haruskah saya langsung menghubungi layanan Logger saya (yang menggunakan rantai tanggung jawab secara internal) dan hanya itu?
Fire-Dragon-DoL
8

Gunakan Pemrograman Berorientasi Aspek yang menggunakan saran Setelah, Sebelum dan Di Sekitar metode. Di sana, sesuai kebutuhan Anda, Anda dapat menambahkan log sebelum memulai api, setelah atau pada beberapa kondisi dan juga memisahkan kode utama Anda dari kode logging.

Yogesh Patil
sumber
0

Nah, Pengamat terdengar tidak cocok untuk saya. Selain itu, melemparkan panggilan logger "di mana pun Anda membutuhkan" akan menghancurkan kode Anda dan melanggar SRP.

Anda mungkin - misalnya - tertarik pada AOP untuk ini, sehingga Anda dapat melampirkan panggilan logger melalui anotasi metode.

Powerslave
sumber
0

Rantai tanggung jawab tampaknya menjadi pola yang baik ketika output Anda dapat mendarat di banyak tempat. Di UML Anda memiliki logger yang berbeda yang mengarahkan ke konsol, yang lain ke errorFile dan ke-3 hanya info logger.

Biasanya saya telah melihat bahwa logLevel berbeda tetapi file logging sama.

Saya tidak melihat pola pengamat sebagai buruk untuk logging karena memisahkan kode logging Anda dari kode aplikasi. Ini merupakan praktik yang baik, bermigrasi ke berbagai mekanisme pembalakan mudah dengan cara ini. Setiap kali Anda ingin mencatat, jalankan suatu acara dan pendengar yang tepat akan menerima acara tersebut dan mencatatnya. Seharusnya ada objek singleton perantara yang menyimpan daftar semua register.

Dengan cara ini saya melihat bahwa kita dapat memisahkan kode logging dari kode aplikasi.

pengguna2922188
sumber