3.1 รายการระดับเหตุการณ์
การบันทึกเป็นกระบวนการบันทึกเหตุการณ์ใด ๆ ที่เกิดขึ้นในขณะที่โปรแกรมกำลังทำงาน หน้าที่ของคุณในฐานะโปรแกรมเมอร์คือrecord everything importantเมื่อproductionมีข้อผิดพลาดแปลก ๆ และ / หรือร้ายแรง คุณจะไม่มีอะไรอื่นนอกจากบันทึกเหล่านี้
ข้อผิดพลาดใด ๆ จะถูกกำจัดเร็วขึ้นหลายเท่าหากคุณมีข้อมูลทั้งหมดเกี่ยวกับข้อผิดพลาดและประวัติการโทรทั้งหมด แต่ข้อสรุปง่ายๆ จากที่นี่ - เพื่อบันทึกทุกอย่างโดยทั่วไป: การเรียกใช้เมธอดทั้งหมด, ค่าของพารามิเตอร์ทั้งหมด
นี่ไม่ใช่ตัวเลือก - ข้อมูลที่มากเกินไปก็ไม่ดีพอๆ กับที่น้อยเกินไป เราต้องการการบันทึกที่ชาญฉลาด สร้างโดยมนุษย์เพื่อมนุษย์ และที่นี่เรามาถึงข้อเท็จจริงแรกเกี่ยวกับการบันทึก - รายการทั้งหมดในบันทึกจะถูกแบ่งออกเป็นหมวดหมู่แม้ในขณะที่สร้าง
โปรแกรมเมอร์เมื่อเขียนเหตุการณ์ลงในบันทึกต้องตัดสินใจด้วยตัวเองว่าข้อมูลนี้มีความสำคัญเพียงใด ผู้เขียนข้อความเป็นผู้เลือกระดับความรุนแรงของเหตุการณ์ log4jความสำคัญของข้อมูลที่บันทึกไว้มี 5 ระดับ:
DEBUGINFOWARNERRORFATAL
ด้านล่างนี้เราจะบอกรายละเอียดเพิ่มเติมเกี่ยวกับพวกเขา
3.2 ดีบัก
ระดับDEBUGถือว่ามีความสำคัญน้อยที่สุด ข้อมูลที่เขียนลงในบันทึกด้วยระดับความสำคัญนี้จำเป็นระหว่างการดีบักแอปพลิเคชันเท่านั้น ในการบันทึกข้อมูลที่จำเป็นระหว่างการดีบัก จะใช้วิธีการdebug()นี้
ตัวอย่าง:
class Manager {
private static final Logger logger = LoggerFactory.getLogger(Manager.class);
public boolean processTask(Task task) {
logger.debug("processTask id = " + task.getId());
try {
task.start();
task.progress();
task.complete();
return true;
} catch (Exception e) {
logger.error("Unknown error", e);
return false;
}
}
}
ให้ความสนใจเมธอดdebugอยู่ที่จุดเริ่มต้นของเมธอด (เมธอดยังไม่มีเวลาทำอะไร) และเขียนค่าของตัวแปรที่ส่งผ่านไปยังเมธอดไปยังบันทึก นี่เป็นกรณีการใช้งานทั่วไปสำหรับวิธีการdebug()นี้
3.3 ข้อมูลและคำเตือน
อีกสองระดับถัด ไป คือINFOและ WARNมีสองวิธีสำหรับพวกเขา - info()และwarn().
ระดับนี้INFOใช้สำหรับข้อความที่ให้ข้อมูล: สิ่งนี้และที่เกิดขึ้น เมื่อคุณเริ่มแยกวิเคราะห์ข้อผิดพลาดในบันทึก การอ่านเบื้องหลังจะมีประโยชน์มาก วิธีนี้เหมาะสำหรับสิ่งinfo()นี้
ระดับWARNที่ใช้ในการเขียนคำเตือน (จากคำว่าคำเตือน ) โดยปกติแล้ว ด้วยระดับความสำคัญนี้ ข้อมูลจะถูกเขียนขึ้นว่ามีบางอย่างผิดพลาด แต่โปรแกรมรู้ว่าต้องทำอย่างไรในสถานการณ์นี้
ตัวอย่างเช่น ในกระบวนการเขียนไฟล์ลงดิสก์ ปรากฎว่ามีไฟล์ดังกล่าวอยู่แล้ว ที่นี่โปรแกรมสามารถบันทึกคำเตือน (คำเตือน) แต่แสดงกล่องโต้ตอบและเสนอให้ผู้ใช้เลือกชื่อไฟล์อื่น
ตัวอย่าง:
class FileManager {
private static final Logger logger = LoggerFactory.getLogger(FileManager.class);
public boolean saveFile(FileData file) {
logger.info(“save the file ” + file.getName());
boolean resultOK = SaveUtils.save(file);
if (resultOK) return true;
logger.warn(“file writing problem ” + file.getName());
String filename = Dialog.selectFile();
boolean result = SaveUtils.save(file, filename);
return result;
}
3.4 ข้อผิดพลาดและร้ายแรง
สุดท้าย ระดับการบันทึกที่สำคัญที่สุดสองระดับคือERRORและ FATALสำหรับพวกเขายังมีวิธีการพิเศษที่มีชื่อเหมือนกัน: error()และfatal().
พวกเขายังตัดสินใจแบ่งข้อผิดพลาดออกเป็นสองประเภท ได้แก่ ข้อ ผิดพลาดทั่วไปและข้อผิดพลาดร้ายแรง ข้อผิดพลาดร้ายแรงมักส่งผลให้เกิดความผิดพลาดของแอปพลิเคชัน (สำหรับแอปพลิเคชันเดสก์ท็อป) หรือบริการเว็บขัดข้อง (สำหรับแอปพลิเคชันบนเว็บ)
อีกตัวอย่างที่ดีคือระบบปฏิบัติการ Windows หากโปรแกรมของคุณเพิ่งหยุดทำงาน จากมุมมองของระบบปฏิบัติการ นี่คือError. และหากระบบปฏิบัติการล่มและคุณเห็นหน้าจอสีน้ำเงินแห่งความตายของ Windows แสดงว่าเป็นแล้วFatal error.
ในแอปพลิเคชัน Java เหตุการณ์ มัก ErrorจะFatalเกี่ยวข้องกับข้อยกเว้นที่เพิ่มขึ้น ตัวอย่าง:
class Manager {
private static final Logger logger = LoggerFactory.getLogger(Manager.class);
public boolean processTask(Task task) {
logger.debug("processTask id = " + task.getId());
try {
task.start();
task.progress();
task.complete();
return true;
} catch (Exception e) {
logger.error("Unknown error", e);
return false;
}
}
}
3.5 สิ่งที่ต้องเข้าสู่ระบบ
แน่นอนว่ามันไม่คุ้มที่จะบันทึกทุกอย่างติดต่อกัน ในกรณีส่วนใหญ่ สิ่งนี้ทำให้ความสามารถในการอ่านบันทึกแย่ลงอย่างมาก และหลังจากนั้น บันทึกจะถูกเขียนขึ้นตั้งแต่แรกเพื่อที่จะอ่านได้
นอกจากนี้ คุณไม่สามารถเขียนข้อมูลส่วนบุคคลและข้อมูลทางการเงินต่าง ๆ ลงในบันทึกได้ ตอนนี้คุณสามารถถูกปรับหรือถูกฟ้องร้องอย่างเคร่งครัดและง่ายดาย ไม่ช้าก็เร็วบันทึกดังกล่าวจะรั่วไหลออกไปด้านข้างและจะไม่มีปัญหา
ดังนั้นสิ่งที่ควรเข้าสู่ระบบ?
ขั้นแรก คุณต้องบันทึกการเริ่มต้นแอปพลิเคชัน หลังจากที่แอปพลิเคชันเริ่มต้นขึ้น ขอแนะนำให้บันทึกโหมดการทำงานและการตั้งค่าที่สำคัญต่างๆ ซึ่งจะทำให้อ่านบันทึกได้ง่ายขึ้นในอนาคต
ประการที่สอง คุณต้องบันทึกสถานะของบริการของบุคคลที่สามทั้งหมดที่แอปพลิเคชันของคุณทำงานด้วย: ระบบการส่งจดหมาย บริการภายนอกใดๆ อย่างน้อยที่สุด คุณต้องรักษาช่วงเวลาของการเชื่อมต่อกับพวกเขาเพื่อให้แน่ใจว่าพวกเขาทำงานได้อย่างถูกต้อง
ประการที่สาม ต้องบันทึกข้อ ยกเว้นทั้งหมด หากคาดว่าจะสามารถเขียนข้อมูลให้กะทัดรัดได้ ข้อมูลที่ครบถ้วนเกี่ยวกับข้อยกเว้นจะให้ข้อมูลสำคัญ 50%-80% เมื่อค้นหาจุดบกพร่อง
คุณต้องบันทึกการปิดแอปพลิเคชันด้วย แอปพลิเคชันต้องยุติตามปกติและไม่ทิ้งข้อผิดพลาดมากมายลงในบันทึก บ่อยครั้งในสถานที่นี้ คุณจะพบงานที่ติดขัด ปัญหาเกี่ยวกับเธรดพูล หรือปัญหาเกี่ยวกับการลบไฟล์ชั่วคราว
อย่าลืมบันทึกทุกอย่างที่เกี่ยวข้องกับความปลอดภัยและการให้สิทธิ์ผู้ใช้ หากผู้ใช้พยายามเข้าสู่ระบบหรือรีเซ็ตรหัสผ่านติดต่อกัน 10 ครั้ง ข้อมูลนี้ควรจะแสดงในบันทึก
บันทึก ข้อมูลเกี่ยวกับงานแบบอะซิงโครนัสให้ได้มากที่สุด- ข้อยกเว้นมักจะหายไปในเธรดดังกล่าว สำหรับงานแบบอะซิงโครนัส ต้องแน่ใจว่าได้บันทึกจุดเริ่มต้นและจุดสิ้นสุด การดำเนินการที่สำเร็จควรเข้าสู่ระบบในลักษณะเดียวกับที่มีปัญหา
อะไรอีก? เรียกใช้งานที่กำหนดเวลา เรียกใช้งานที่เก็บไว้ ซิงSQL-proceduresโครไนซ์ข้อมูล ทุกอย่างที่เกี่ยวข้องกับธุรกรรมแบบกระจาย ฉันคิดว่ามันเพียงพอแล้วสำหรับการเริ่มต้น คุณจะเพิ่มในรายการนี้ในอนาคต
GO TO FULL VERSION