ฉันทำงานกับระบบความปลอดภัยแบบเรียลไทม์ที่สำคัญและการบันทึกมักเป็นวิธีเดียวที่จะจับข้อผิดพลาดที่หายากที่ปรากฏขึ้นหนึ่งครั้งในทุกวันอังคารที่ 53 เมื่อมันเป็นวันพระจันทร์เต็มดวงถ้าคุณล่องลอยไป การทำแบบนี้ทำให้คุณหมกมุ่นกับเรื่องนี้ดังนั้นฉันจะขอโทษตอนนี้ถ้าฉันเริ่มที่ปาก ต่อไปนี้ถูกเขียนสำหรับบันทึกการดีบักโค้ดเนทีฟ แต่ส่วนใหญ่ใช้ได้กับโลกที่มีการจัดการด้วย ...
ใช้ไฟล์บันทึกข้อความ ดูเหมือนจะชัดเจน แต่บางคนพยายามสร้างไฟล์บันทึกแบบไบนารี่: มันแค่โง่เพราะฉันไม่จำเป็นต้องมองหาเครื่องมืออ่านเมื่อฉันออกไปข้างนอก นอกจากนี้หากเป็นข้อความและการดีบักจะมีโอกาสที่วิศวกรสนามสามารถอ่านไฟล์และวิเคราะห์ปัญหาโดยไม่ต้องกลับมาหาฉัน ทุกคนชนะ
ฉันออกแบบระบบที่มีความสามารถในการบันทึกทุกอย่างสวยมาก แต่ฉันไม่ได้เปิดทุกอย่างเป็นค่าเริ่มต้น ข้อมูลการดีบักจะถูกส่งไปยังกล่องโต้ตอบการดีบักที่ซ่อนอยู่ซึ่งจะประทับเวลาและส่งออกไปยังกล่องรายการ (จำกัด อยู่ที่ประมาณ 500 บรรทัดก่อนการลบ) และกล่องโต้ตอบอนุญาตให้ฉันหยุดบันทึกโดยอัตโนมัติไปยังล็อกไฟล์ ดีบักเกอร์ที่แนบมา การเบี่ยงเบนนั้นทำให้ฉันเห็นผลลัพธ์การดีบักจากหลาย ๆ แอพพลิเคชั่นทั้งหมดที่เรียงลำดับอย่างเป็นระเบียบซึ่งบางครั้งก็สามารถช่วยชีวิตได้ ฉันเคยใช้ระดับการบันทึกที่เป็นตัวเลข (ยิ่งคุณตั้งระดับไว้สูงเท่าไรก็ยิ่งจับได้มากขึ้น):
off
errors only
basic
detailed
everything
แต่มันไม่ยืดหยุ่นเกินไป - ในขณะที่คุณทำงานเพื่อหาจุดบกพร่องมันจะมีประสิทธิภาพมากขึ้นที่จะสามารถโฟกัสการเข้าสู่ระบบในสิ่งที่คุณต้องการโดยไม่ต้องเดินผ่านเศษซากจำนวนมากและมันอาจเป็นธุรกรรมหรือการดำเนินการชนิดหนึ่ง ที่ทำให้เกิดข้อผิดพลาด ถ้านั่นทำให้คุณต้องเปิดทุกอย่างคุณก็แค่ทำให้งานของคุณเองยากขึ้น คุณต้องการสิ่งที่ละเอียดยิ่งขึ้น
ดังนั้นตอนนี้ฉันกำลังอยู่ในขั้นตอนการเปลี่ยนไปใช้การบันทึกตามระบบธง ทุกอย่างที่ได้รับการบันทึกมีการตั้งค่าสถานะรายละเอียดว่ามันคืออะไรและมีชุดของช่องทำเครื่องหมายให้ฉันกำหนดสิ่งที่ได้รับการบันทึก โดยทั่วไปรายการจะมีลักษณะดังนี้:
#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
ระบบการบันทึกนี้มาพร้อมกับบิลด์รีลีสเปิดใช้งานและบันทึกเป็นไฟล์ตามค่าเริ่มต้น มันสายเกินไปที่จะทราบว่าคุณควรทำการบันทึกหลังจากที่เกิดข้อผิดพลาดหากข้อผิดพลาดนั้นเกิดขึ้นเพียงครั้งเดียวทุกหกเดือนโดยเฉลี่ยและคุณไม่มีทางทำซ้ำได้ การบันทึกที่ใช้งานได้กับการสร้างข้อบกพร่องนั้นเป็นเพียง ธรรมดา. โง่.
โดยทั่วไปซอฟต์แวร์จะจัดส่งมาพร้อมกับข้อผิดพลาดพื้นฐาน BASIC, STATE_CHANGE และข้อยกเว้น แต่สามารถเปลี่ยนแปลงได้ในฟิลด์ผ่านกล่องโต้ตอบการดีบัก (หรือการตั้งค่ารีจิสทรี / ini / cfg ซึ่งสิ่งเหล่านี้ได้รับการบันทึก)
โอ้และอีกอย่างหนึ่ง - ระบบดีบั๊กของฉันสร้างหนึ่งไฟล์ต่อวัน ความต้องการของคุณอาจแตกต่างกัน แต่ตรวจสอบให้แน่ใจว่ารหัส debug ของคุณเริ่มต้นทุกไฟล์ด้วยวันที่รุ่นของรหัสที่คุณกำลังใช้งานและถ้าเป็นไปได้ให้ทำเครื่องหมายบางอย่างสำหรับรหัสลูกค้าที่ตั้งของระบบหรืออะไรก็ตาม คุณสามารถรับไฟล์บันทึกที่ผิดพลาดได้จากสนามและคุณต้องการบันทึกว่าเกิดอะไรขึ้นจากที่ใดและรุ่นใดของระบบที่ใช้งานอยู่ซึ่งเป็นข้อมูลจริงและคุณไม่สามารถไว้วางใจลูกค้าได้ / วิศวกรสนามที่จะบอกคุณว่าพวกเขามีรุ่น - พวกเขาอาจจะบอกคุณว่าพวกเขาคิดว่าพวกเขามีรุ่น ที่แย่กว่านั้นพวกเขาอาจรายงานรุ่น exe ที่อยู่บนดิสก์ แต่รุ่นเก่ายังคงทำงานอยู่เพราะพวกเขาลืมรีบูตหลังจากเปลี่ยน ให้รหัสของคุณบอกตัวเอง
สุดท้ายคุณไม่ต้องการให้รหัสของคุณสร้างปัญหาของตัวเองดังนั้นให้ใส่ฟังก์ชั่นจับเวลาเพื่อกำจัดไฟล์บันทึกหลังจากผ่านไปหลายวันหรือหลายสัปดาห์ (เพียงตรวจสอบความแตกต่างระหว่างเวลาตอนนี้กับเวลาที่สร้างไฟล์) นี่คือการตกลงสำหรับแอปเซิร์ฟเวอร์ที่ทำงานตลอดเวลาในแอปฝั่งไคลเอ็นต์ที่คุณสามารถรับได้ด้วยการลบข้อมูลเก่าใด ๆ เมื่อคุณเริ่มต้น โดยทั่วไปเราจะทำการล้างหลังจาก 30 วันหรือมากกว่านั้นในระบบที่ไม่มีวิศวกรเข้าเยี่ยมชมบ่อยครั้งคุณอาจต้องการทิ้งไว้นานกว่านั้น แน่นอนว่าสิ่งนี้ขึ้นอยู่กับขนาดของไฟล์บันทึกของคุณด้วย