มีความก้าวหน้าพื้นฐานสองประการด้วยวิธีการที่มีโครงสร้างซึ่งไม่สามารถเลียนแบบได้โดยใช้ความพยายามเพิ่มเติม (บางครั้งระดับมาก)
ประเภทเหตุการณ์
เมื่อคุณเขียนสองเหตุการณ์ด้วยlog4netเช่น:
log.Debug("Disk quota {0} exceeded by user {1}", 100, "DTI-Matt");
log.Debug("Disk quota {0} exceeded by user {1}", 150, "nblumhardt");
สิ่งเหล่านี้จะสร้างข้อความที่คล้ายกัน:
Disk quota 100 exceeded by user DTI-Matt
Disk quota 150 exceeded by user nblumhardt
แต่เท่าที่เกี่ยวข้องกับการประมวลผลของเครื่องพวกเขามีเพียงข้อความสองบรรทัดที่แตกต่างกัน
คุณอาจต้องการค้นหาเหตุการณ์ "เกินโควต้าดิสก์" แต่กรณีง่าย ๆ ของการค้นหาเหตุการณ์like 'Disk quota%'
จะล้มลงทันทีที่มีเหตุการณ์อื่นเกิดขึ้นเช่น:
Disk quota 100 set for user DTI-Matt
การบันทึกข้อความจะลบข้อมูลที่เรามีในตอนแรกเกี่ยวกับแหล่งที่มาของเหตุการณ์และสิ่งนี้จะต้องมีการสร้างขึ้นมาใหม่เมื่ออ่านบันทึกมักจะมีการแสดงออกของการจับคู่ที่ซับซ้อนมากขึ้น
ในทางตรงกันข้ามเมื่อคุณเขียนเหตุการณ์Serilogสองเหตุการณ์ต่อไปนี้:
log.Debug("Disk quota {Quota} exceeded by user {Username}", 100, "DTI-Matt");
log.Debug("Disk quota {Quota} exceeded by user {Username}", 150, "nblumhardt");
สิ่งเหล่านี้สร้างเอาต์พุตข้อความที่คล้ายกับเวอร์ชัน log4net แต่เบื้องหลังแล้ว"Disk quota {Quota} exceeded by user {Username}"
เทมเพลตข้อความจะถูกดำเนินการโดยทั้งสองเหตุการณ์
ด้วยอ่างล้างจานที่เหมาะสมในภายหลังคุณสามารถเขียนคำสั่งwhere MessageTemplate = 'Disk quota {Quota} exceeded by user {Username}'
และได้รับว่าเหตุการณ์ที่เกิดขึ้นที่โควต้าดิสก์ที่ถูกเกิน
มันไม่ได้เสมอสะดวกในการเก็บแม่แบบข้อความทั้งหมดที่มีการบันทึกเหตุการณ์ทุกครั้งเพื่ออ่างล้างมือบางสับแม่แบบข้อความเป็นตัวเลขEventType
ค่า (เช่น0x1234abcd
) หรือคุณสามารถเพิ่ม Enricher ที่จะเข้าสู่ระบบท่อที่จะทำเช่นนี้ด้วยตัวคุณเอง
มันละเอียดกว่าความแตกต่างด้านล่างถัดไป แต่เป็นสิ่งที่ทรงพลังอย่างมากเมื่อต้องจัดการกับบันทึกปริมาณมาก
ข้อมูลที่มีโครงสร้าง
like 'Disk quota' and like 'DTI-Matt'
อีกครั้งเมื่อพิจารณาจากสองเหตุการณ์เกี่ยวกับการใช้พื้นที่ดิสก์ก็อาจจะง่ายพอที่ใช้บันทึกข้อความเพื่อสอบถามสำหรับผู้ใช้โดยเฉพาะอย่างยิ่งกับ
แต่การวิเคราะห์การผลิตไม่ได้ตรงไปตรงมาเสมอ ลองนึกภาพว่าจำเป็นต้องหากิจกรรมที่มีโควต้าดิสก์เกินกว่า 125 MB หรือไม่
ด้วย Serilog สิ่งนี้เป็นไปได้ในการจมส่วนใหญ่โดยใช้ตัวแปร:
Quota < 125
การสร้างแบบสอบถามชนิดนี้จากการแสดงออกปกติเป็นไปได้ แต่มันก็เหนื่อยเร็วและมักจะกลายเป็นตัวชี้วัดสุดท้าย
ตอนนี้เพิ่มประเภทเหตุการณ์นี้:
Quota < 125 and EventType = 0x1234abcd
คุณเริ่มเห็นว่าความสามารถเหล่านี้รวมกันในวิธีที่ตรงไปตรงมาเพื่อให้การดีบักการผลิตกับบันทึกรู้สึกเหมือนเป็นกิจกรรมการพัฒนาชั้นหนึ่ง
ข้อดีอีกประการหนึ่งอาจไม่ใช่เรื่องง่ายที่จะป้องกันล่วงหน้า แต่เมื่อการดีบักการผลิตได้ถูกยกออกจากดินแดนแห่งแฮกเกอร์ regex นักพัฒนาเริ่มบันทึกค่ามากขึ้นและใช้ความระมัดระวังมากขึ้นและพิจารณาเมื่อเขียน บันทึกที่ดีขึ้น -> แอปพลิเคชันที่มีคุณภาพดีขึ้น -> มีความสุขมากขึ้นทุกรอบ