Saya diberi "kesempatan" untuk menyelamatkan beberapa proyek dan eksekutif menggantikan seluruh tim dev karena aplikasi memiliki terlalu banyak kesalahan dan pengguna sudah bosan dengan masalah dan kehabisan. Semua basis kode ini memiliki penanganan kesalahan terpusat di tingkat aplikasi seperti dijelaskan oleh jawaban terpilih teratas. Jika jawaban itu adalah praktik terbaik mengapa tidak berhasil dan membiarkan tim dev sebelumnya menyelesaikan masalah? Mungkin kadang tidak berhasil? Jawaban di atas tidak menyebutkan berapa lama dev menghabiskan waktu untuk memperbaiki satu masalah. Jika waktu untuk menyelesaikan masalah adalah metrik kunci, menginstruksikan kode dengan try..catch block adalah praktik yang lebih baik.
Bagaimana tim saya memperbaiki masalah tanpa secara signifikan mengubah UI? Sederhana, setiap metode diinstrumentasi dengan try..catch diblokir dan semuanya dicatat pada titik kegagalan dengan nama metode, nilai parameter metode disatukan menjadi string yang diteruskan bersama dengan pesan kesalahan, pesan kesalahan, nama aplikasi, tanggal, dan versi. Dengan informasi ini pengembang dapat menjalankan analitik pada kesalahan untuk mengidentifikasi pengecualian yang paling banyak terjadi! Atau namespace dengan jumlah kesalahan tertinggi. Itu juga dapat memvalidasi bahwa kesalahan yang terjadi dalam modul ditangani dengan benar dan tidak disebabkan oleh beberapa alasan.
Manfaat pro lainnya dari ini adalah pengembang dapat menetapkan satu break-point dalam metode logging kesalahan dan dengan satu break-point dan satu klik tombol debug "step out", mereka berada dalam metode yang gagal dengan akses penuh ke aktual objek pada titik kegagalan, mudah tersedia di jendela langsung. Itu membuatnya sangat mudah untuk debug dan memungkinkan menyeret eksekusi kembali ke awal metode untuk menduplikasi masalah untuk menemukan baris yang tepat. Apakah penanganan pengecualian terpusat memungkinkan pengembang untuk mereplikasi pengecualian dalam 30 detik? Tidak.
Pernyataan "Suatu metode seharusnya hanya menangkap pengecualian ketika dapat menanganinya dengan cara yang masuk akal." Ini menyiratkan bahwa pengembang dapat memprediksi atau akan menghadapi setiap kesalahan yang dapat terjadi sebelum rilis. Jika ini benar tingkat atas, penangan pengecualian aplikasi tidak akan diperlukan dan tidak akan ada pasar untuk Pencarian Elastis dan logstash.
Pendekatan ini juga memungkinkan pengembang menemukan dan memperbaiki masalah berselang dalam produksi! Apakah Anda ingin men-debug tanpa debugger dalam produksi? Atau apakah Anda lebih suka menerima telepon dan menerima email dari pengguna yang kesal? Ini memungkinkan Anda untuk memperbaiki masalah sebelum orang lain tahu dan tanpa harus mengirim email, IM, atau Slack dengan dukungan karena semua yang diperlukan untuk memperbaiki masalah ada di sana. 95% masalah tidak perlu direproduksi.
Agar berfungsi dengan benar, perlu dikombinasikan dengan logging terpusat yang dapat menangkap namespace / modul, nama kelas, metode, input, dan pesan kesalahan dan menyimpannya dalam database sehingga dapat digabungkan untuk menyoroti metode mana yang paling gagal sehingga dapat diperbaiki dulu.
Terkadang pengembang memilih untuk melemparkan pengecualian ke tumpukan dari blok tangkap tetapi pendekatan ini 100 kali lebih lambat dari kode normal yang tidak melempar. Menangkap dan melepaskan dengan logging lebih disukai.
Teknik ini digunakan untuk menstabilkan aplikasi dengan cepat yang gagal setiap jam bagi sebagian besar pengguna di perusahaan Fortune 500 yang dikembangkan oleh 12 Devs selama 2 tahun. Dengan menggunakan 3000 pengecualian ini, diidentifikasi, diperbaiki, diuji, dan digunakan dalam 4 bulan. Ini rata-rata untuk memperbaiki setiap 15 menit rata-rata selama 4 bulan.
Saya setuju bahwa tidak menyenangkan untuk mengetik semua yang diperlukan untuk instrumen kode dan saya lebih suka untuk tidak melihat kode berulang, tetapi menambahkan 4 baris kode untuk setiap metode tidak sia-sia dalam jangka panjang.