Saya bekerja dengan sistem waktu-kritis kritis keselamatan dan penebangan seringkali merupakan satu-satunya cara untuk menangkap bug langka yang muncul sekali bulan biru pada setiap Selasa ke-53 ketika bulan purnama, jika Anda mengetahui maksud saya. Jenis ini membuat Anda terobsesi dengan subjek, jadi saya akan minta maaf sekarang jika saya mulai berbusa. Berikut ini ditulis untuk log debug kode asli, tetapi sebagian besar berlaku untuk dunia yang dikelola juga ...
Gunakan file log teks. Tampak jelas, tetapi beberapa orang memang mencoba membuat file log biner: itu hanya bodoh karena saya tidak perlu mencari alat pembaca ketika saya berada di lapangan. Ditambah lagi jika itu teks dan debugnya bertele-tele, ada kemungkinan insinyur lapangan dapat membaca file dan mendiagnosis masalahnya tanpa pernah kembali kepada saya. Semua orang menang.
Saya merancang sistem yang mampu mencatat hampir semua hal, tetapi saya tidak mengaktifkan semuanya secara default. Informasi debug dikirim ke dialog debug tersembunyi yang mencatat waktu dan mengeluarkannya ke kotak daftar (terbatas pada sekitar 500 baris sebelum dihapus), dan dialog memungkinkan saya untuk menghentikannya, menyimpannya ke file log secara otomatis, atau mengalihkannya ke debugger terlampir. Pengalihan itu memungkinkan saya untuk melihat hasil debug dari beberapa aplikasi yang semuanya terserialisasi dengan rapi, yang kadang-kadang bisa menjadi penyelamat. Saya biasa menggunakan level logging numerik (semakin tinggi Anda mengatur level, semakin banyak yang Anda tangkap):
off
errors only
basic
detailed
everything
tetapi ini terlalu tidak fleksibel - saat Anda berusaha menuju bug, jauh lebih efisien untuk dapat fokus masuk pada apa yang Anda butuhkan tanpa harus melalui banyak detritus, dan itu mungkin merupakan satu jenis transaksi atau operasi tertentu yang menyebabkan kesalahan. Jika itu mengharuskan Anda untuk mengaktifkan semuanya, Anda hanya membuat pekerjaan Anda sendiri lebih sulit. Anda membutuhkan sesuatu yang lebih halus.
Jadi sekarang saya sedang dalam proses beralih ke logging berdasarkan sistem bendera. Segala sesuatu yang dicatat memiliki tanda yang merinci operasi apa itu, dan ada satu set kotak centang yang memungkinkan saya untuk menentukan apa yang dicatat. Biasanya daftar itu terlihat seperti ini:
#define DEBUG_ERROR 1
#define DEBUG_BASIC 2
#define DEBUG_DETAIL 4
#define DEBUG_MSG_BASIC 8
#define DEBUG_MSG_POLL 16
#define DEBUG_MSG_STATUS 32
#define DEBUG_METRICS 64
#define DEBUG_EXCEPTION 128
#define DEBUG_STATE_CHANGE 256
#define DEBUG_DB_READ 512
#define DEBUG_DB_WRITE 1024
#define DEBUG_SQL_TEXT 2048
#define DEBUG_MSG_CONTENTS 4096
Sistem logging ini dikirimkan dengan rilis build, dihidupkan dan disimpan ke file secara default. Sudah terlambat untuk mengetahui Anda seharusnya login SETELAH bug telah terjadi, jika bug itu hanya terjadi setiap enam bulan rata-rata dan Anda tidak memiliki cara untuk mereproduksinya. Logging yang hanya berfungsi dengan debug build saja. polos. bodoh.
Perangkat lunak biasanya dikirimkan dengan ERROR, BASIC, STATE_CHANGE dan EXCEPTION dihidupkan, tetapi ini dapat diubah di lapangan melalui dialog debug (atau pengaturan registri / ini / cfg, di mana hal-hal ini disimpan).
Oh dan satu hal - sistem debug saya menghasilkan satu file per hari. Persyaratan Anda mungkin berbeda. Tetapi pastikan kode debug Anda memulai setiap file dengan tanggal, versi kode yang Anda jalankan, dan jika mungkin beberapa penanda untuk ID pelanggan, lokasi sistem atau apa pun. Anda bisa mendapatkan mash-mash file log yang datang dari lapangan, dan Anda perlu beberapa catatan tentang apa yang datang dari mana dan versi sistem apa yang mereka jalankan yang sebenarnya ada dalam data itu sendiri, dan Anda tidak bisa mempercayai pelanggan / insinyur lapangan untuk memberi tahu Anda versi apa yang mereka miliki - mereka mungkin hanya memberi tahu Anda versi apa yang mereka miliki. Lebih buruk lagi, mereka dapat melaporkan versi exe yang ada di disk, tetapi versi lama masih berjalan karena mereka lupa untuk reboot setelah mengganti. Minta kode Anda memberitahu Anda sendiri.
Terakhir, Anda tidak ingin kode Anda menghasilkan masalah sendiri, jadi masukkan fungsi pengatur waktu untuk membersihkan file log setelah berhari-hari atau berminggu-minggu (cukup periksa perbedaan antara waktu sekarang dan waktu pembuatan file). Ini OK untuk aplikasi server yang berjalan sepanjang waktu, pada aplikasi sisi klien Anda bisa bertahan dengan membersihkan data lama saat Anda memulai. Kami biasanya membersihkan setelah 30 hari atau lebih, pada sistem tanpa kunjungan insinyur yang sering Anda ingin meninggalkannya lebih lama. Jelas ini tergantung pada ukuran file log Anda juga.