Ada dua kemajuan mendasar dengan pendekatan terstruktur yang tidak dapat ditiru menggunakan log teks tanpa (kadang-kadang tingkat ekstrim) upaya tambahan.
Jenis Acara
Ketika Anda menulis dua acara dengan log4net seperti:
log.Debug("Disk quota {0} exceeded by user {1}", 100, "DTI-Matt");
log.Debug("Disk quota {0} exceeded by user {1}", 150, "nblumhardt");
Ini akan menghasilkan teks yang serupa:
Disk quota 100 exceeded by user DTI-Matt
Disk quota 150 exceeded by user nblumhardt
Tapi, sejauh menyangkut pemrosesan mesin, mereka hanya dua baris teks yang berbeda.
Anda mungkin ingin menemukan semua peristiwa "kuota disk melebihi", tetapi kasus sederhana dalam mencari acara like 'Disk quota%'
akan jatuh segera setelah peristiwa lain terjadi seperti:
Disk quota 100 set for user DTI-Matt
Pencatatan teks membuang informasi yang awalnya kami miliki tentang sumber acara, dan ini harus direkonstruksi ketika membaca log biasanya dengan lebih banyak ekspresi pertandingan yang rumit.
Sebaliknya, ketika Anda menulis dua acara Serilog berikut :
log.Debug("Disk quota {Quota} exceeded by user {Username}", 100, "DTI-Matt");
log.Debug("Disk quota {Quota} exceeded by user {Username}", 150, "nblumhardt");
Ini menghasilkan output teks yang mirip dengan versi log4net, tetapi di balik layar, "Disk quota {Quota} exceeded by user {Username}"
templat pesan dilakukan oleh kedua peristiwa.
Dengan sink yang sesuai, Anda nantinya dapat menulis kueri where MessageTemplate = 'Disk quota {Quota} exceeded by user {Username}'
dan mendapatkan kejadian persis di mana kuota disk terlampaui.
Tidak selalu nyaman untuk menyimpan seluruh templat pesan dengan setiap peristiwa log, jadi beberapa sinking hash templat pesan menjadi EventType
nilai numerik (misalnya 0x1234abcd
), atau, Anda bisa menambahkan pengaya ke pipa logging untuk melakukan ini sendiri .
Ini lebih halus daripada perbedaan berikutnya di bawah ini, tetapi yang sangat kuat ketika berhadapan dengan volume log yang besar.
Data Terstruktur
Sekali lagi mempertimbangkan dua peristiwa tentang penggunaan ruang disk, mungkin cukup mudah menggunakan log teks untuk permintaan pengguna tertentu like 'Disk quota' and like 'DTI-Matt'
.
Tetapi, diagnosa produksi tidak selalu mudah. Bayangkan perlunya menemukan peristiwa di mana kuota disk melebihi di bawah 125 MB?
Dengan Serilog, ini dimungkinkan di sebagian besar sink menggunakan varian:
Quota < 125
Membangun kueri semacam ini dari ekspresi reguler adalah mungkin, tetapi proses ini menjadi cepat melelahkan dan biasanya menjadi ukuran upaya terakhir.
Sekarang tambahkan ke ini jenis acara:
Quota < 125 and EventType = 0x1234abcd
Anda mulai melihat di sini bagaimana kemampuan ini bergabung dengan cara yang langsung untuk membuat debugging produksi dengan log terasa seperti aktivitas pengembangan kelas satu.
Satu manfaat lebih lanjut, mungkin tidak semudah itu dicegah, tetapi begitu debugging produksi telah dihapus dari tanah peretasan regex, pengembang mulai menilai log lebih banyak dan lebih berhati-hati dan mempertimbangkan ketika menulisnya. Log yang lebih baik -> aplikasi berkualitas lebih baik -> lebih banyak kebahagiaan di sekitar.