วิธีการจัดการบันทึกหลายวิธีภายใต้ .Net
Log เป็นส่วนที่ขาดไม่ได้ของแอปพลิเคชัน ไม่เพียงแต่สามารถบันทึกสถานะการทำงานของแอปพลิเคชันเท่านั้น แต่ยังบันทึก BUG บางอย่างเพื่ออำนวยความสะดวกในการอัปเดตและแก้ไขแอปพลิเคชันอีกด้วย
มีหลายวิธีในการจัดการบันทึกใน .Net
1. บันทึกฐานข้อมูล
2. บันทึกข้อความ
3. บันทึกเหตุการณ์ของระบบ
ประการแรก การใช้งานบันทึกฐานข้อมูลทำได้ง่ายและสะดวก ฉันจะไม่พูดคุยมากเกินไปที่นี่ ฉันเชื่อว่าใครก็ตามที่เขียนโครงการที่เกี่ยวข้องกับข้อมูลจะใช้ข้อมูลเพื่อบันทึกบันทึกบางส่วน อย่างไรก็ตาม ข้อเสียประการเดียวคือคุณต้องตรวจสอบให้แน่ใจก่อนว่าลิงก์ฐานข้อมูลของคุณถูกต้อง
อย่างไรก็ตาม การรับประกันนี้เป็นสิ่งที่หลีกเลี่ยงไม่ได้ ดังนั้นที่นี่ฉันจะหารือเกี่ยวกับอีกสองสถานการณ์ บันทึกข้อความและบันทึกเหตุการณ์ของระบบ
บันทึกข้อความ:
มันใช้งานง่ายและง่ายต่อการดู ข้อเสียคือไม่สะดวกที่จะสร้างบันทึกจำนวนมาก และดูและวิเคราะห์เนื้อหาบันทึกไม่สะดวก อย่างไรก็ตาม ยังคงสามารถใช้ได้ในบางจุดที่การบันทึกฐานข้อมูลไม่เหมาะสม ตัวอย่างเช่น ผลลัพธ์ของข้อความทดสอบบางส่วน บันทึกจำนวนเล็กน้อยของส่วนประกอบอิสระบางส่วน เป็นต้น
ภายใต้สถานการณ์ปกติ เพื่ออำนวยความสะดวกในการจัดการ ไฟล์บันทึกจะถูกจัดประเภทเป็นหน่วยวัน ด้วยวิธีนี้จึงสามารถจัดการไฟล์ได้อย่างง่ายดาย ตัวอย่างเช่น: คุณสามารถทราบได้ว่าเมื่อใดบันทึกนี้มาจากชื่อไฟล์ของคุณ จากนั้นคุณสามารถสร้างแบบสอบถามที่คล้ายกับฐานข้อมูลได้ และการจัดการก็สะดวกเช่นกัน ท้ายที่สุดแล้ว ข้อความนั้นง่ายต่อระบบมาก
.Net มีคลาสการวินิจฉัยที่สามารถเพิ่มข้อความลงใน Trace และ Debug ในรูปแบบของการฟัง ด้วยวิธีนี้ เอาต์พุตทั้งหมดของคุณที่ส่งไปยัง Trace และ Degug จะถูกบันทึกไว้ในไฟล์ นี่เป็นวิธีการที่ดีมาก
ใช้ System.Diagnostics;
Debug.Listeners.Add (System.Diagnostics.TextWriterTraceListener ใหม่ (DateTime.Now.ToString("yyyyMMdd")+"..log"));
Console.Out
));
Trace.Listeners.Add(ระบบใหม่ Diagnostics.TextWriterTraceListener(DateTime.Now.ToString("yyyyMMdd")+"..log"));
Trace.Listeners.Add(new System.Diagnostics.TextWriterTraceListener(Console.Out));
ความแตกต่างคือ: Trace สามารถใช้ได้ภายใต้ Release ในขณะที่ Debug สามารถใช้ได้ภายใต้ Debug เท่านั้น
ฉันคิดว่าในบรรดาบันทึกข้อความทั้งหมด วิธีการข้างต้นมีประโยชน์มากที่สุด คุณเพียงแค่ต้องสร้างคลาสการจัดการบันทึกใหม่เท่านั้น
แน่นอน คุณควรทราบด้วยว่าจำเป็นต้องอัปเดตจอภาพหลังจากผ่านไป 24 ชั่วโมง คุณควรล้างจอภาพปัจจุบันและเพิ่มอันใหม่ มันยังง่ายอีกด้วย
อีกวิธีหนึ่งคือการเขียนข้อความด้วยตนเองเพื่อการจัดการ วิธีนี้ยุ่งยากกว่านิดหน่อยแต่ก็ไม่ยาก
อย่างไรก็ตาม นอกจากจะไม่สะดวกในการทำงานบันทึกจำนวนมากแล้ว บันทึกข้อความยังมีปัญหาร้ายแรงอีกด้วย: กระบวนการขัดแย้งกัน!
เนื่องจากการบันทึกข้อความจะล็อคไฟล์ข้อความที่กำลังเขียน โปรแกรมอื่นๆ ที่ต้องการเขียนลงไฟล์จึงจะพบข้อผิดพลาด ภายใต้สถานการณ์ปกติ หากมีสำเนาของโปรแกรมที่ทำงานอยู่เพียงชุดเดียวและมีการประมวลผลบันทึกเป็นอ็อบเจ็กต์โกลบอลสแตติก ก็จะไม่มีปัญหาใหญ่ใดๆ แต่สำเนาที่สองของโปรแกรมจะไม่สามารถเริ่มทำงานได้เนื่องจากไม่สามารถเปิดไฟล์ได้
นี่ไม่ใช่ปัญหาที่แก้ไขไม่ได้ เพียงตรวจสอบให้แน่ใจว่าคุณมีสำเนาของโปรแกรม ถ้าไม่รับประกันก็ซับซ้อนนิดหน่อยเราจะไม่พูดถึงเรื่องนี้อีกต่อไปเมื่อเรามีโอกาส
สำหรับปัญหาข้างต้น ฉันต้องการละทิ้งบันทึกข้อความชั่วคราวและใช้บันทึกเหตุการณ์ของระบบเพื่อจัดการกับมัน
บันทึกเหตุการณ์ของระบบ:
มีคลาส EventLog ภายใต้ .net ซึ่งเชื่อมโยงโดยตรงกับบันทึกเหตุการณ์ของระบบ
ง่ายๆ:
EventLog.WriteEntry("LogSource","นี่คือบันทึกทดสอบ");
คุณสามารถเขียนเหตุการณ์ลงในระบบได้
อย่างไรก็ตาม การใช้ให้ดีอาจมีความยุ่งยากเล็กน้อย ขั้นแรก วิธีการข้างต้นจะเขียนบันทึกเหตุการณ์ภายใต้แอปพลิเคชันของระบบ และค่าเริ่มต้นคือประเภทข้อมูล สิ่งนี้ไม่เอื้อต่อการจัดการ คุณสามารถดูบันทึกในเครื่องมือการจัดการและคุณจะพบบันทึกจำนวนมาก เป็นไปไม่ได้ที่จะหาบันทึกขนาดเล็กที่เขียนด้วยตัวเอง
อย่างไรก็ตาม .Net มีหลายวิธีให้เราจัดการบันทึกได้ดียิ่งขึ้น
1. เพิ่ม LogSource ใหม่
LogSource คืออะไร พูดง่ายๆ ก็คือมันคือเครื่องหมายจำแนกประเภทของบันทึก ตัวอย่างเช่น คุณสามารถใช้โปรแกรมเพื่อดึงข้อมูลบันทึกที่มี LogSource เป็นเนื้อหาที่ระบุในคราวเดียว ด้วยวิธีนี้ ตราบใดที่คุณจำชื่อแหล่งที่มาได้ คุณก็สามารถอ่านและจัดหมวดหมู่บันทึกได้
ตามค่าเริ่มต้น เมื่อคุณเขียนบันทึกโดยตรงโดยใช้ฟังก์ชันคงที่ของ EventLog คุณจะต้องระบุ LogSource หากไม่มี LogSource จะสร้างขึ้นมาโดยอัตโนมัติภายใต้แอปพลิเคชัน
2. เพิ่มบันทึกใหม่
Log คืออะไร Log ในที่นี้หมายถึงการจัดหมวดหมู่บันทึกขนาดใหญ่ในบันทึกเหตุการณ์ของระบบ โดยทั่วไป ระบบจะมีบันทึกสามรายการ: แอปพลิเคชัน ระบบ และบริการ ซึ่งแต่ละรายการมี Souce ที่แตกต่างกัน ดังนั้น จึงสร้างระบบบันทึกขึ้นมา
คุณไม่สามารถสร้างบันทึกได้อย่างอิสระ เนื่องจาก .NET ไม่มีวิธีการใดๆ ในการสร้างบันทึก คุณสามารถใช้ได้เฉพาะฟังก์ชัน: CreateEventSource(string, string)
หากต้องการสร้างแหล่งที่มา หากคุณทำเช่นนี้: CreateEventSource("MySource", "MyLog");
คุณจะเห็นคลาส MyLog เพิ่มเติมในตัวจัดการบันทึก จากนั้นเขียนบันทึกดังนี้:
EventLog.WriteEntry("MySource","นี่คือบันทึกทดสอบ");
คุณสามารถเขียนบันทึกภายใต้หมวดหมู่ MyLog เพื่อให้คุณสามารถจัดการบันทึกของคุณเองได้ดี
สิ่งที่ต้องอธิบายคือ:
หากมีแหล่งที่มาอยู่แล้ว การสร้างจะล้มเหลว หมายเหตุ: ไม่ว่าบันทึกของแหล่งที่มาใด ตราบใดที่ชื่อของแหล่งที่มามีอยู่แล้ว การสร้างของคุณจะล้มเหลว ตัวอย่างเช่น: หากมีบันทึกของ "Source1" ในแอปพลิเคชัน คุณจะไม่สามารถสร้างบันทึกชื่อ "Source1" ในบันทึกอื่นได้ นอกจากนี้: บันทึกที่คุณสร้างโดยใช้โปรแกรมไม่สามารถลบในตัวจัดการบันทึกได้ (สามารถลบข้อความได้ แต่หมวดหมู่บันทึกไม่สามารถลบได้) วิธีการคือคุณยังคงสามารถใช้โปรแกรมเพื่อลบมันหรือลบมันในรีจิสทรีได้ ตำแหน่ง: [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlog]
ลองดูที่รีจิสทรีบางทีคุณอาจจะเข้าใจอะไรบางอย่าง
ขั้นตอนสุดท้ายคือการใช้ออบเจ็กต์อินสแตนซ์บันทึกเพื่อเขียนบันทึก คุณสามารถระบุชื่อบันทึกและชื่อแหล่งที่มาเพื่อเขียนบันทึกได้ แต่โปรดทราบว่าบันทึกและแหล่งที่มาจะต้องตรงกัน มิฉะนั้นจะเกิดข้อผิดพลาดขึ้น สิ่งนี้ซับซ้อนกว่าการบันทึกโดยตรงโดยใช้วิธีคงที่เล็กน้อย แต่คุณมีอิสระมากกว่า
ข้อเสียของบันทึกเหตุการณ์ของระบบคือ บันทึกจะถูกบันทึกไว้เพียงสามเดือนเท่านั้น และยากต่อการจัดการ จะดีกว่าถ้าคุณสามารถจัดการเซิร์ฟเวอร์ได้โดยตรงหรือรันในเครื่อง ไม่เช่นนั้นคุณจะต้องเขียนโค้ดเพื่อจัดการบันทึกด้วยตนเอง แน่นอนว่าหากบันทึกสำคัญบางอย่างสามารถส่งออกไปยังไฟล์อื่นได้
ประโยชน์ของมันมีมากมาย:
1. ไม่จำเป็นต้องเชื่อมต่อกับฐานข้อมูล ประสิทธิภาพจะสูงขึ้น และจะไม่มีปัญหาการเข้าถึงฐานข้อมูลล้มเหลว
2. จะไม่มีความขัดแย้งของกระบวนการ มันเป็นบันทึกของระบบ ไม่ว่าจะเป็นแอปพลิเคชันใด ก็สามารถเขียนบันทึกได้
3. บันทึกที่มีอยู่ทั่วโลกสามารถเขียนได้โดยตรงไม่ว่าจะอยู่ที่ไหนและสามารถอ่านได้ ดังนั้นจึงถือได้ว่าเป็นแพลตฟอร์มการสื่อสารข้อความ (แน่นอนว่าอาจมีเฉพาะผู้ที่มีปัญหาทางสมองเท่านั้นที่จะทำเช่นนี้) อย่างไรก็ตาม ฉันแค่อยากจะอธิบายว่า บันทึกที่เขียนโดยกระบวนการ A สามารถอ่านได้โดยตรงโดยกระบวนการ B
โอเค นั่นคือทั้งหมดที่เกี่ยวกับบันทึกในครั้งนี้
http://www.cnblogs.com/WuCountry/archive/2006/08/22/483090.html