อัปเดต:สำหรับส่วนขยายไปยัง System.Diagnostics ให้ผู้ฟังบางคนหายไปที่คุณอาจต้องการดู Essential.Diagnostics บน CodePlex ( http://essentialdiagnostics.codeplex.com/ )
กรอบ
ถาม: คุณใช้กรอบอะไร
A: System.Diagnostics.TraceSource สร้างขึ้นใน. NET 2.0
มันให้การบันทึกที่มีประสิทธิภาพยืดหยุ่นและมีประสิทธิภาพสูงสำหรับแอพพลิเคชั่นอย่างไรก็ตามนักพัฒนาหลายคนไม่ได้ตระหนักถึงความสามารถของมัน
มีบางพื้นที่ที่ฟังก์ชันการทำงานเพิ่มเติมมีประโยชน์หรือบางครั้งมีฟังก์ชั่นการใช้งานอยู่ แต่ไม่ได้รับการบันทึกไว้อย่างดีอย่างไรก็ตามนี่ไม่ได้หมายความว่ากรอบการบันทึกทั้งหมด (ซึ่งถูกออกแบบมาให้ขยายได้) ควรถูกโยนทิ้งไป (NLog, log4net, Common.Logging และแม้กระทั่งการบันทึก EntLib)
แทนที่จะเปลี่ยนวิธีที่คุณเพิ่มคำสั่งการบันทึกลงในแอปพลิเคชันของคุณและคิดค้นวงล้อใหม่เพียงขยายกรอบงาน System.Diagnostics ในไม่กี่แห่งที่คุณต้องการ
ดูเหมือนว่าฉันจะกรอบอื่น ๆ แม้ EntLib เพียงแค่ประสบจากโรคที่ไม่ได้คิดค้นที่นี่และฉันคิดว่าพวกเขาได้สูญเสียเวลาอีกครั้งประดิษฐ์พื้นฐานที่ทำงานได้ดีอย่างสมบูรณ์ใน System.Diagnostics (เช่นวิธีที่คุณเขียนคำสั่งบันทึก) แทนที่จะเติมช่องว่างเล็กน้อยที่มีอยู่ ในระยะสั้นอย่าใช้พวกเขา - พวกเขาไม่ต้องการ
คุณสมบัติที่คุณอาจไม่รู้จัก:
- การใช้ TraceEvent มากเกินไปที่ใช้สตริงรูปแบบและ args สามารถช่วยให้ประสิทธิภาพการทำงานเป็นพารามิเตอร์ที่ถูกเก็บไว้เป็นการอ้างอิงแยกต่างหากจนกว่าหลังจาก Filter.ShouldTrace () ได้สำเร็จ ซึ่งหมายความว่าจะไม่มีการเรียก ToString () ค่าพารามิเตอร์ที่มีราคาแพงจนกระทั่งหลังจากที่ระบบได้ยืนยันข้อความจะถูกบันทึกจริง
- Trace.CorrelationManager ช่วยให้คุณสามารถเชื่อมโยงคำสั่งบันทึกเกี่ยวกับการดำเนินการทางตรรกะเดียวกัน (ดูด้านล่าง)
- VisualBasic.Logging.FileLogTraceListener เหมาะสำหรับการเขียนไปยังล็อกไฟล์และรองรับการหมุนไฟล์ แม้ว่าในเนมสเปซ VisualBasic มันสามารถใช้ในโครงการ C # (หรือภาษาอื่น ๆ ) ได้อย่างง่ายดายเพียงแค่รวม DLL
- เมื่อใช้ EventLogTraceListener ถ้าคุณเรียกใช้ TraceEvent ที่มีอาร์กิวเมนต์หลายตัวและด้วยสตริงรูปแบบที่ว่างเปล่าหรือเป็นโมฆะ args จะถูกส่งโดยตรงไปยัง EventLog.WriteEntry () หากคุณใช้ทรัพยากรข้อความที่แปลแล้ว
- เครื่องมือ Service Trace Viewer (จาก WCF) มีประโยชน์สำหรับการดูกราฟของไฟล์บันทึกที่สัมพันธ์กันของกิจกรรม (แม้ว่าคุณจะไม่ได้ใช้ WCF) สิ่งนี้สามารถช่วยแก้ไขข้อบกพร่องที่ซับซ้อนซึ่งมีหลายเธรด / กิจกรรมที่เกี่ยวข้อง
- หลีกเลี่ยงค่าใช้จ่ายโดยการล้างผู้ฟังทั้งหมด (หรือลบค่าเริ่มต้น); ค่าเริ่มต้นจะส่งผ่านทุกอย่างไปยังระบบติดตาม (และจะต้องมีค่าใช้จ่าย ToString () ทั้งหมด)
พื้นที่ที่คุณอาจต้องการดูการขยาย (ถ้าจำเป็น):
- ฟังการสืบค้นฐานข้อมูล
- ฟังคอนโซลการติดตามสี
- ตัวรับฟังการสืบค้นกลับ MSMQ / Email / WMI (หากจำเป็น)
- ใช้ FileSystemWatcher เพื่อโทรหา Trace.Refresh สำหรับการเปลี่ยนแปลงการกำหนดค่าแบบไดนามิก
คำแนะนำอื่น ๆ :
ใช้ id เหตุการณ์ที่มีโครงสร้างและเก็บรายการอ้างอิง (เช่นบันทึกไว้ใน enum)
การมีรหัสเหตุการณ์ที่ไม่ซ้ำกันสำหรับแต่ละเหตุการณ์ (สำคัญ) ในระบบของคุณมีประโยชน์มากสำหรับการสร้างความสัมพันธ์และการค้นหาปัญหาเฉพาะ ง่ายต่อการติดตามกลับไปยังรหัสเฉพาะที่บันทึก / ใช้รหัสเหตุการณ์และสามารถทำให้ง่ายต่อการให้คำแนะนำสำหรับข้อผิดพลาดทั่วไปเช่นข้อผิดพลาด 5178 หมายความว่าสายอักขระการเชื่อมต่อฐานข้อมูลของคุณผิด ฯลฯ
รหัสเหตุการณ์ควรเป็นไปตามโครงสร้างบางประเภท (คล้ายกับทฤษฎีรหัสตอบกลับที่ใช้ในอีเมลและ HTTP) ซึ่งช่วยให้คุณสามารถจัดการได้ตามหมวดหมู่โดยไม่ทราบรหัสเฉพาะ
เช่นตัวเลขแรกสามารถแสดงรายละเอียดของคลาสทั่วไป: 1xxx สามารถใช้สำหรับการดำเนินการ 'เริ่ม', 2xxx สำหรับพฤติกรรมปกติ, 3xxx สำหรับการติดตามกิจกรรม, 4xxx สำหรับการเตือน, 5xxx สำหรับข้อผิดพลาด, 8xxx สำหรับการดำเนินการ 'หยุด', 9xxx สำหรับข้อผิดพลาดร้ายแรง เป็นต้น
ตัวเลขที่สองสามารถแสดงรายละเอียดพื้นที่เช่น 21xx สำหรับข้อมูลฐานข้อมูล (41xx สำหรับคำเตือนฐานข้อมูล 51xx สำหรับข้อผิดพลาดฐานข้อมูล) 22xx สำหรับโหมดการคำนวณ (42xx สำหรับคำเตือนการคำนวณ ฯลฯ ) 23xx สำหรับโมดูลอื่น ฯลฯ
รหัสเหตุการณ์ที่กำหนดไว้แล้วยังช่วยให้คุณใช้ในตัวกรองได้
ถาม: หากคุณใช้การติดตามคุณใช้ Trace.Correlation.StartLogicalOperation หรือไม่
ตอบ: Trace.CorrelationManager มีประโยชน์อย่างมากสำหรับการเชื่อมโยงคำสั่งบันทึกในสภาพแวดล้อมแบบมัลติเธรดใด ๆ (ซึ่งค่อนข้างทุกวันนี้)
อย่างน้อยคุณต้องตั้งค่า ActivityId หนึ่งครั้งสำหรับการดำเนินการทางตรรกะแต่ละรายการเพื่อให้สัมพันธ์กัน
Start / Stop และ LogicalOperationStack นั้นสามารถใช้สำหรับบริบทสแต็กที่เรียบง่าย สำหรับบริบทที่ซับซ้อนมากขึ้น (เช่นการดำเนินการแบบอะซิงโครนัส) โดยใช้ TraceTransfer กับ ActivityId ใหม่ (ก่อนที่จะเปลี่ยน) จะอนุญาตให้มีความสัมพันธ์กัน
เครื่องมือ Service Trace Viewer อาจมีประโยชน์สำหรับการดูกราฟกิจกรรม (แม้ว่าคุณจะไม่ได้ใช้ WCF)
ถาม: คุณเขียนโค้ดนี้ด้วยตนเองหรือคุณใช้รูปแบบการเขียนโปรแกรมเชิงคุณภาพเพื่อทำมันหรือไม่? ต้องการแบ่งปันข้อมูลโค้ดหรือไม่
ตอบ: คุณอาจต้องการสร้างคลาสของขอบเขตเช่น LogicalOperationScope ซึ่ง (a) ตั้งค่าบริบทเมื่อสร้างและ (b) รีเซ็ตบริบทเมื่อกำจัด
สิ่งนี้ช่วยให้คุณสามารถเขียนโค้ดดังต่อไปนี้เพื่อทำการตัดคำอัตโนมัติ:
using( LogicalOperationScope operation = new LogicalOperationScope("Operation") )
{
// .. do work here
}
ในการสร้างขอบเขตสามารถตั้งค่า ActivityId ได้ก่อนหากจำเป็นให้เรียกใช้ StartLogicalOperation จากนั้นบันทึกข้อความ TraceEventType.Start ในการกำจัดมันสามารถบันทึกข้อความหยุดแล้วโทร StopLogicalOperation
ถาม: คุณมีรูปแบบของความละเอียดมากกว่าแหล่งที่มีการสืบค้นหรือไม่? เช่น WPF TraceSources อนุญาตให้คุณกำหนดค่าในระดับต่างๆ
ตอบ: ใช่แหล่งข้อมูลการสืบค้นกลับหลายแห่งนั้นมีประโยชน์ / สำคัญเนื่องจากระบบมีขนาดใหญ่ขึ้น
ในขณะที่คุณอาจต้องการบันทึกคำเตือน & ด้านบนทั้งหมดหรือข้อความ & ข้อมูลทั้งหมดข้างต้นอย่างสม่ำเสมอสำหรับระบบที่มีขนาดพอสมควรปริมาณของการติดตามกิจกรรม (เริ่มหยุด ฯลฯ ) และการบันทึก Verbose จะมากเกินไป
แทนที่จะมีเพียงสวิตช์เดียวที่เปิดหรือปิดทั้งหมดจะเป็นประโยชน์ที่จะสามารถเปิดข้อมูลนี้สำหรับส่วนหนึ่งของระบบของคุณในแต่ละครั้ง
ด้วยวิธีนี้คุณสามารถค้นหาปัญหาที่สำคัญจากการบันทึกปกติ (คำเตือนข้อผิดพลาดและอื่น ๆ ) จากนั้น "ซูมเข้า" ในส่วนที่คุณต้องการและตั้งค่าเป็นการติดตามกิจกรรมหรือแม้กระทั่งระดับการดีบัก
จำนวนแหล่งที่มาของการสืบค้นที่คุณต้องการนั้นขึ้นอยู่กับแอปพลิเคชันของคุณเช่นคุณอาจต้องการแหล่งที่มาของการติดตามหนึ่งรายการต่อชุดประกอบหรือต่อส่วนสำคัญของแอปพลิเคชันของคุณ
หากคุณต้องการการควบคุมแบบละเอียดยิ่งขึ้นให้เพิ่มสวิตช์บูลีนแต่ละตัวเพื่อเปิด / ปิดการติดตามปริมาณสูงเฉพาะเช่นการทิ้งข้อความดิบ (หรือสามารถใช้แหล่งที่มาการติดตามที่แยกต่างหากคล้ายกับ WCF / WPF)
คุณอาจต้องการพิจารณาแหล่งที่มาของการติดตามแยกต่างหากสำหรับการบันทึกการติดตามกิจกรรม vs ทั่วไป (อื่น ๆ ) เนื่องจากสามารถทำให้ง่ายขึ้นเล็กน้อยในการกำหนดค่าตัวกรองตามที่คุณต้องการ
โปรดทราบว่าข้อความยังสามารถมีความสัมพันธ์ผ่านทาง ActivityId แม้ว่าจะใช้แหล่งข้อมูลที่แตกต่างกันดังนั้นให้ใช้มากเท่าที่คุณต้องการ
ฟัง
ถาม: คุณใช้บันทึกผลลัพธ์ใด
ขึ้นอยู่กับประเภทของแอปพลิเคชันที่คุณเขียนและสิ่งที่บันทึกไว้ โดยทั่วไปแล้วสิ่งต่าง ๆ จะไปในที่ต่าง ๆ (เช่นหลายเอาต์พุต)
โดยทั่วไปฉันแบ่งประเภทผลลัพธ์เป็นสามกลุ่ม:
(1) เหตุการณ์ - บันทึกเหตุการณ์ของ Windows (และไฟล์การติดตาม)
เช่นถ้าเขียนเซิร์ฟเวอร์ / บริการแนวทางปฏิบัติที่ดีที่สุดใน Windows คือการใช้บันทึกเหตุการณ์ของ Windows (คุณไม่มี UI ที่จะรายงาน)
ในกรณีนี้เหตุการณ์ข้อมูลร้ายแรงข้อผิดพลาดคำเตือนและ (ระดับบริการ) ควรไปที่บันทึกเหตุการณ์ Windows ควรมีการจองระดับข้อมูลสำหรับเหตุการณ์ระดับสูงเหล่านี้รายการที่คุณต้องการไปในบันทึกเหตุการณ์เช่น "เริ่มบริการ", "หยุดบริการ", "เชื่อมต่อกับ Xyz" และอาจเป็น "กำหนดการเริ่มต้น" , "ผู้ใช้ที่ล็อกอิน" ฯลฯ
ในบางกรณีคุณอาจต้องการเขียนลงในบันทึกเหตุการณ์เป็นส่วนหนึ่งของแอปพลิเคชันของคุณและไม่ผ่านระบบติดตาม (เช่นเขียนบันทึกเหตุการณ์โดยตรง) หมายความว่าไม่สามารถปิดได้โดยไม่ตั้งใจ (โปรดทราบว่าคุณยังต้องการบันทึกเหตุการณ์เดียวกันในระบบติดตามของคุณเพื่อให้คุณสามารถเชื่อมโยงได้)
ในทางตรงกันข้ามแอปพลิเคชัน Windows GUI โดยทั่วไปจะรายงานสิ่งเหล่านี้ต่อผู้ใช้ (แม้ว่าพวกเขาอาจบันทึกลงในบันทึกเหตุการณ์ของ Windows)
เหตุการณ์อาจมีตัวนับประสิทธิภาพที่เกี่ยวข้อง (เช่นจำนวนข้อผิดพลาด / วินาที) และมันเป็นสิ่งสำคัญที่จะประสานการเขียนโดยตรงไปยังบันทึกเหตุการณ์เคาน์เตอร์วัดประสิทธิภาพการเขียนไปยังระบบติดตามและการรายงานไปยังผู้ใช้ ในเวลาเดียวกัน
นั่นคือหากผู้ใช้เห็นข้อความแสดงข้อผิดพลาดในเวลาใดเวลาหนึ่งคุณควรจะสามารถค้นหาข้อความแสดงข้อผิดพลาดเดียวกันในบันทึกเหตุการณ์ของ Windows จากนั้นเหตุการณ์เดียวกันที่มีการประทับเวลาเดียวกันในบันทึกการติดตาม (รวมถึงรายละเอียดการติดตามอื่น ๆ )
(2) กิจกรรม - ไฟล์บันทึกของแอปพลิเคชันหรือตารางฐานข้อมูล (และไฟล์ติดตาม)
นี่เป็นกิจกรรมปกติที่ระบบทำเช่นหน้าเว็บที่ให้บริการการซื้อขายในตลาดหุ้นการสั่งซื้อการดำเนินการคำนวณเป็นต้น
การติดตามกิจกรรม (เริ่มหยุด ฯลฯ ) มีประโยชน์ที่นี่ (ที่ความถูกต้องที่เหมาะสม)
นอกจากนี้ยังเป็นเรื่องธรรมดามากที่จะใช้ Application Log เฉพาะ (บางครั้งเรียกว่า Audit Log) โดยปกติจะเป็นตารางฐานข้อมูลหรือไฟล์บันทึกแอปพลิเคชันและมีข้อมูลที่มีโครงสร้าง (เช่นชุดของฟิลด์)
สิ่งต่าง ๆ อาจเบลอเล็กน้อยขึ้นอยู่กับแอปพลิเคชันของคุณ ตัวอย่างที่ดีอาจเป็นเว็บเซิร์ฟเวอร์ที่เขียนแต่ละคำขอไปยังบันทึกการใช้เว็บ ตัวอย่างที่คล้ายกันอาจเป็นระบบการส่งข้อความหรือระบบการคำนวณซึ่งการดำเนินการแต่ละครั้งจะถูกบันทึกพร้อมกับรายละเอียดเฉพาะแอปพลิเคชัน
ตัวอย่างที่ไม่ดีนักคือการซื้อขายในตลาดหุ้นหรือระบบการสั่งซื้อการขาย ในระบบเหล่านี้คุณอาจบันทึกกิจกรรมอยู่เนื่องจากมีคุณค่าทางธุรกิจที่สำคัญอย่างไรก็ตามความสัมพันธ์หลักกับการดำเนินการอื่น ๆ ยังคงมีความสำคัญ
เช่นเดียวกับบันทึกของแอปพลิเคชันที่กำหนดเองกิจกรรมก็มักจะมีตัวนับการแสดงผลที่เกี่ยวข้องเช่นจำนวนธุรกรรมต่อวินาที
โดยทั่วไปคุณควรประสานการบันทึกกิจกรรมในระบบต่าง ๆ เช่นเขียนบันทึกแอปพลิเคชันของคุณในเวลาเดียวกับที่คุณเพิ่มตัวนับประสิทธิภาพและเข้าสู่ระบบติดตามของคุณ หากคุณทำทั้งหมดในเวลาเดียวกัน (หรือตรงตามกันในรหัส) การแก้ปัญหาการดีบักนั้นง่ายกว่า (มากกว่าถ้าเกิดขึ้นในเวลา / สถานที่ต่าง ๆ ในรหัส)
(3) Debug Trace - ไฟล์ข้อความหรืออาจเป็น XML หรือฐานข้อมูล
นี่คือข้อมูลที่ระดับ Verbose และต่ำกว่า (เช่นสวิตช์บูลีนแบบกำหนดเองเพื่อเปิด / ปิดการถ่ายโอนข้อมูลดิบ) สิ่งนี้แสดงความกล้าหรือรายละเอียดว่าระบบกำลังทำอะไรในระดับกิจกรรมย่อย
นี่คือระดับที่คุณต้องการเปิด / ปิดสำหรับแต่ละส่วนของแอปพลิเคชันของคุณ (ซึ่งเป็นแหล่งที่มาหลายแห่ง) คุณไม่ต้องการให้สิ่งนี้รกบันทึกเหตุการณ์ Windows บางครั้งมีการใช้ฐานข้อมูล แต่มีแนวโน้มว่าจะมีการม้วนไฟล์บันทึกที่ถูกลบหลังจากเวลาที่กำหนด
ความแตกต่างอย่างมากระหว่างข้อมูลนี้และไฟล์ล็อกแอปพลิเคชันคือมันไม่มีโครงสร้าง ขณะที่ล็อกแอปพลิเคชันอาจมีฟิลด์สำหรับถึงจากจำนวนเงิน ฯลฯ การติดตามการดีบักแบบ Verbose อาจเป็นสิ่งที่โปรแกรมเมอร์ใส่เช่น "การตรวจสอบค่า X = {value}, Y = false" หรือความคิดเห็น / เครื่องหมายสุ่มเช่น " เสร็จแล้วลองอีกครั้ง "
วิธีปฏิบัติที่สำคัญประการหนึ่งคือการทำให้แน่ใจว่าสิ่งที่คุณใส่ไว้ในไฟล์บันทึกแอปพลิเคชันหรือบันทึกเหตุการณ์ของ Windows ยังได้รับการบันทึกไว้ในระบบติดตามด้วยรายละเอียดเดียวกัน (เช่นการประทับเวลา) สิ่งนี้ช่วยให้คุณสามารถเชื่อมโยงบันทึกต่าง ๆ เมื่อทำการตรวจสอบ
หากคุณวางแผนที่จะใช้ตัวแสดงบันทึกเฉพาะเนื่องจากคุณมีความสัมพันธ์ที่ซับซ้อนเช่น Service Trace Viewer ดังนั้นคุณต้องใช้รูปแบบที่เหมาะสมเช่น XML มิฉะนั้นไฟล์ข้อความธรรมดามักจะดีพอ - ในระดับต่ำกว่าข้อมูลส่วนใหญ่ไม่มีโครงสร้างดังนั้นคุณอาจพบว่ามีการดัมพ์ของอาร์เรย์การทิ้งสแต็ก ฯลฯ หากคุณสามารถเชื่อมโยงกลับไปยังบันทึกที่มีโครงสร้างมากขึ้นในระดับที่สูงขึ้น จะไม่เป็นไร
ถาม: หากใช้ไฟล์คุณใช้โรลลิ่งล็อกหรือเพียงไฟล์เดียว? คุณจะทำให้บันทึกพร้อมใช้งานเพื่อให้ผู้คนบริโภคได้อย่างไร
ตอบ: สำหรับไฟล์โดยทั่วไปคุณต้องการกลิ้งไฟล์ล็อกจากมุมมองที่สามารถจัดการได้ (ด้วย System.Diagnostics เพียงใช้ VisualBasic.Logging.FileLogTraceListener)
ความพร้อมใช้งานขึ้นอยู่กับระบบอีกครั้ง หากคุณกำลังพูดถึงไฟล์สำหรับเซิร์ฟเวอร์ / บริการไฟล์กลิ้งสามารถเข้าถึงได้เมื่อจำเป็นเท่านั้น (บันทึกเหตุการณ์ Windows หรือบันทึกแอปพลิเคชันฐานข้อมูลจะมีกลไกการเข้าถึงของตนเอง)
หากคุณไม่สามารถเข้าถึงระบบไฟล์ได้ง่ายการดีบักการติดตามไปยังฐานข้อมูลอาจทำได้ง่ายกว่า [เช่นใช้ฐานข้อมูล TraceListener]
วิธีแก้ปัญหาที่น่าสนใจอย่างหนึ่งที่ฉันเห็นสำหรับแอพพลิเคชั่น Windows GUI คือมันบันทึกข้อมูลการติดตามอย่างละเอียดไปยัง "เครื่องบันทึกการบิน" ในขณะที่ทำงานและเมื่อคุณปิดเครื่องหากไม่มีปัญหาก็จะลบไฟล์
ถ้าอย่างไรก็ตามมันล้มเหลวหรือพบปัญหาแสดงว่าไฟล์นั้นไม่ถูกลบ ไม่ว่ามันจะจับข้อผิดพลาดหรือในครั้งต่อไปมันก็จะสังเกตเห็นไฟล์และจากนั้นมันสามารถดำเนินการเช่นบีบอัดมัน (เช่น 7zip) และส่งอีเมลหรือทำให้เป็นอย่างอื่น
ระบบจำนวนมากในทุกวันนี้รวมการรายงานความล้มเหลวอัตโนมัติไปยังเซิร์ฟเวอร์กลาง (หลังจากตรวจสอบกับผู้ใช้เช่นเหตุผลด้านความเป็นส่วนตัว)
กำลังดู
ถาม: เครื่องมือใดที่คุณใช้สำหรับดูบันทึก
ตอบ: หากคุณมีบันทึกหลายรายการด้วยเหตุผลที่แตกต่างกันคุณจะใช้ผู้ดูหลายคน
Notepad / vi / Notepad ++ หรือแก้ไขข้อความอื่น ๆ เป็นพื้นฐานสำหรับบันทึกข้อความธรรมดา
หากคุณมีการดำเนินการที่ซับซ้อนเช่นกิจกรรมที่มีการถ่ายโอนแน่นอนคุณต้องใช้เครื่องมือพิเศษเช่น Service Trace Viewer (แต่ถ้าคุณไม่ต้องการมันก็เป็นโปรแกรมแก้ไขข้อความที่ง่ายกว่า)
เนื่องจากโดยทั่วไปฉันบันทึกข้อมูลระดับสูงไปยังบันทึกเหตุการณ์ของ Windows ดังนั้นจึงเป็นวิธีที่รวดเร็วในการรับภาพรวมในรูปแบบที่มีโครงสร้าง (มองหาไอคอนข้อผิดพลาด / คำเตือนที่ค่อนข้างสวย) คุณต้องเริ่มค้นหาไฟล์ข้อความหากมีไม่เพียงพอในบันทึกแม้ว่าอย่างน้อยไฟล์บันทึกจะเป็นจุดเริ่มต้น (ณ จุดนี้ตรวจสอบให้แน่ใจว่าบันทึกของคุณมีการเข้าร่วมที่เป็นประโยชน์)
โดยทั่วไปบันทึกเหตุการณ์ของ Windows ยังทำให้เหตุการณ์สำคัญเหล่านี้สามารถใช้ในการตรวจสอบเครื่องมือเช่น MOM หรือ OpenView
อื่น ๆ -
หากคุณเข้าสู่ฐานข้อมูลสามารถกรองและจัดเรียงข้อมูลได้ง่าย (เช่นซูมเข้ากับรหัสกิจกรรมเฉพาะ (ด้วยไฟล์ข้อความคุณสามารถใช้ Grep / PowerShell หรือคล้ายกับตัวกรองใน GUID ที่ต้องการ)
MS Excel (หรือโปรแกรมสเปรดชีตอื่น) สิ่งนี้มีประโยชน์สำหรับการวิเคราะห์ข้อมูลที่มีโครงสร้างหรือกึ่งโครงสร้างหากคุณสามารถนำเข้าข้อมูลด้วยตัวคั่นที่เหมาะสมเพื่อให้ค่าที่แตกต่างกันไปในคอลัมน์ที่แตกต่างกัน
เมื่อใช้บริการในการแก้ปัญหา / ทดสอบฉันมักจะโฮสต์ในแอปพลิเคชันคอนโซลเพื่อความเรียบง่ายฉันพบว่า logger สีมีประโยชน์ (เช่นสีแดงสำหรับข้อผิดพลาดสีเหลืองสำหรับคำเตือน ฯลฯ ) คุณต้องใช้ฟังการติดตามที่กำหนดเอง
โปรดทราบว่าเฟรมเวิร์กไม่ได้รวมตัวบันทึกคอนโซลที่มีสีหรือตัวบันทึกฐานข้อมูลดังนั้นในตอนนี้คุณจะต้องเขียนสิ่งเหล่านี้หากคุณต้องการ (ไม่ยากเกินไป)
มันทำให้ฉันรำคาญจริง ๆ ว่าหลายเฟรมเวิร์ก (log4net, EntLib ฯลฯ ) เสียเวลาคิดค้นล้อและนำการบันทึกขั้นพื้นฐานไปใช้ใหม่การกรองและการบันทึกไฟล์ข้อความไฟล์บันทึกเหตุการณ์ Windows และไฟล์ XML แต่ละไฟล์เป็นของตนเอง วิธีที่แตกต่าง (คำสั่งบันทึกจะแตกต่างกันในแต่ละ); แต่ละตัวได้นำเวอร์ชันของตัวเองไปใช้แล้วเช่นตัวบันทึกฐานข้อมูลเมื่อส่วนใหญ่มีอยู่แล้วและสิ่งที่จำเป็นต้องมีก็คือตัวรับฟังการติดตามอีกสองสามรายการสำหรับ System.Diagnostics พูดคุยเกี่ยวกับความพยายามซ้ำซ้อน
ถาม: หากคุณกำลังสร้างโซลูชัน ASP.NET คุณยังใช้การตรวจสอบสถานะสุขภาพ ASP.NET หรือไม่ คุณรวมเอาท์พุทการติดตามในเหตุการณ์การตรวจสอบสุขภาพหรือไม่? สิ่งที่เกี่ยวกับ Trace.axd
สิ่งเหล่านี้สามารถเปิด / ปิดได้ตามต้องการ ฉันพบว่า Trace.axd ค่อนข้างมีประโยชน์สำหรับการดีบักวิธีที่เซิร์ฟเวอร์ตอบสนองต่อบางสิ่ง แต่โดยทั่วไปไม่ได้มีประโยชน์ในสภาพแวดล้อมที่ใช้งานหนักหรือการติดตามระยะยาว
ถาม: เคาน์เตอร์วัดประสิทธิภาพที่กำหนดเองเป็นอย่างไร
สำหรับแอปพลิเคชันมืออาชีพโดยเฉพาะอย่างยิ่งเซิร์ฟเวอร์ / บริการฉันคาดว่าจะได้รับการใช้งานอย่างเต็มที่กับเคาน์เตอร์การตรวจสอบประสิทธิภาพและการบันทึกลงในบันทึกเหตุการณ์ของ Windows เหล่านี้เป็นเครื่องมือมาตรฐานใน Windows และควรใช้
คุณต้องแน่ใจว่าคุณมีตัวติดตั้งสำหรับเคาน์เตอร์วัดประสิทธิภาพและบันทึกเหตุการณ์ที่คุณใช้ ควรสร้างสิ่งเหล่านี้ในเวลาการติดตั้ง (เมื่อติดตั้งในฐานะผู้ดูแลระบบ) เมื่อแอปพลิเคชันของคุณทำงานตามปกติคุณไม่จำเป็นต้องมีสิทธิ์การดูแลระบบ (และจะไม่สามารถสร้างบันทึกที่ขาดหายไป)
นี่เป็นเหตุผลที่ดีในการฝึกฝนการพัฒนาในฐานะที่ไม่ใช่ผู้ดูแลระบบ (มีบัญชีผู้ดูแลระบบแยกต่างหากสำหรับเมื่อคุณต้องการติดตั้งบริการ ฯลฯ ) หากเขียนไปยังบันทึกเหตุการณ์. NET จะสร้างบันทึกที่หายไปโดยอัตโนมัติในครั้งแรกที่คุณเขียน หากคุณพัฒนาในฐานะที่ไม่ใช่ผู้ดูแลระบบคุณจะได้รับสิ่งนี้ก่อนเวลาและหลีกเลี่ยงความประหลาดใจที่น่ารังเกียจเมื่อลูกค้าติดตั้งระบบของคุณและไม่สามารถใช้งานได้เพราะพวกเขาไม่ได้ทำงานในฐานะผู้ดูแลระบบ