คนส่วนใหญ่ตระหนักถึงความจำเป็นของบันทึกเมื่อพวกเขาต้องการมากที่สุดเท่านั้น แต่เมื่อแอปพลิเคชันของคุณขัดข้อง ข้อร้องเรียนจากผู้ใช้ก็เริ่มหลั่งไหลเข้ามา และคุณไม่รู้ว่าจะแก้ไขอย่างไร ยังสายเกินไปที่จะเพิ่มข้อความบันทึกที่อาจช่วยได้
ไม้ที่ดีย่อมตอบแทนตัวเองเป็นสิบเท่า พวกเขาทำให้การวินิจฉัยข้อบกพร่องที่ยุ่งยากเหล่านั้นเป็นเรื่องง่าย และหากคุณบันทึกอย่างถูกต้อง พวกเขาสามารถแจ้งเตือนคุณถึงปัญหาก่อนที่ผู้ใช้จะสังเกตเห็นเสียอีก แต่การ 'บันทึกอย่างถูกต้อง' หมายความว่าอย่างไร
การบันทึกนั้นง่ายต่อการเริ่มต้นแต่ยากที่จะเชี่ยวชาญ ในโพสต์นี้ เราจะเจาะลึกถึงวิธีที่คุณสามารถใช้บันทึกของแอปพลิเคชัน Rails ของคุณให้เกิดประโยชน์สูงสุด
การเข้าสู่ระบบ Rails
เรามาพูดถึงพื้นฐานกันก่อน เมื่อคุณเริ่มแอปพลิเคชัน Rails ใหม่ การบันทึกจะถูกตั้งค่าไว้สำหรับคุณแล้ว Rails จะเริ่มต้นอินสแตนซ์ใหม่ของ 07 ที่คุณสามารถใช้ได้ทุกที่ภายในแอปพลิเคชันของคุณ
ตัวบันทึก Rails เขียนไปยังเอาต์พุตมาตรฐานหรือ 11 และจะบันทึกคำขอที่เข้ามาหรือคำค้นหาที่ดำเนินการโดยอัตโนมัติ นอกเหนือจากข้อความบันทึกใด ๆ ที่คุณเขียนอย่างชัดเจน
มีหลายวิธีที่คุณสามารถกำหนดค่าบันทึกของ Rails ได้ ดังที่สรุปไว้อย่างดีเยี่ยมในเอกสารประกอบสำหรับ Rails
เพื่อใช้ประโยชน์สูงสุดจากบันทึกของเรา เราสนใจเป็นพิเศษในการแทรกระดับบันทึกตลอดจนการจัดรูปแบบบันทึก
แต่ก่อนที่จะจัดการเรื่องนั้น เรามาคุยกันว่าทำไมเราจึงควรเขียนบันทึก
การบันทึกที่ดี การบันทึกที่ไม่ดี
วัตถุประสงค์ของบันทึกคือการแจ้งให้คุณทราบเกี่ยวกับเหตุการณ์ของระบบเพื่อให้คุณสามารถตอบสนองได้ ตัวอย่างเช่น เมื่อมีข้อผิดพลาดเกิดขึ้น ข้อความบันทึกควรบอกคุณเกี่ยวกับข้อผิดพลาดในลักษณะที่คุณสามารถเข้าใจได้
คุณเข้าใจข้อความบันทึกได้ดีเพียงใดนั้นขึ้นอยู่กับคำอธิบายและบริบทของข้อความนั้น ข้อความบันทึกอธิบายจะให้ข้อมูลที่เกี่ยวข้องกับสิ่งที่เกิดขึ้น ข้อความบันทึกตามบริบทประกอบด้วยข้อมูลเกี่ยวกับสถานะของระบบเมื่อระบบเขียน
ลองพิจารณาตัวอย่างง่ายๆ เพื่อดูว่าเหตุใดเราจึงต้องการทั้งสองอย่าง นี่คือโค้ดบางส่วนที่เรียก API ภายนอกและส่งคืนการตอบกลับเมื่อผู้ใช้ดำเนินการตามคำขอ
ตอนนี้ ลองจินตนาการถึงสถานการณ์ที่ลูกค้ารายงานปัญหา และคุณดูบันทึกเพื่อขอความช่วยเหลือ นี่คือสิ่งที่คุณอาจเห็น:
ข้อความบันทึกเหล่านี้ให้ข้อมูลบางอย่างแต่ยังไม่เพียงพอ เราไม่สามารถค้นหาคำตอบได้ว่าอะไรคือสิ่งที่รับผิดชอบต่อข้อผิดพลาดที่ลูกค้ารายงาน ข้อความบันทึกเหล่านี้ขาดคำอธิบายและบริบท พวกเขาไม่สนใจ เราจะปรับปรุงสิ่งเหล่านี้ได้อย่างไร
ระดับการบันทึกใน Rails
ตัวบันทึก Rails เริ่มต้นจะให้ระดับการบันทึก 24 , 37รหัส> , 43รหัส> และ 56 . เมื่อใช้สิ่งเหล่านี้ คุณสามารถจัดกลุ่มข้อความบันทึกเป็นหมวดหมู่ต่างๆ ที่เกี่ยวข้องได้ สิ่งนี้ไม่เพียงช่วยให้คุณกรองข้อความบันทึกเท่านั้น แต่ยังให้บริบทบางอย่างอีกด้วย
อาจเป็นเรื่องยากที่จะตัดสินใจว่าเมื่อใดควรใช้ระดับบันทึกใด ต่อไปนี้เป็นกฎทั่วไปบางประการ:
64รหัส> :ใช้ระดับบันทึกนี้สำหรับข้อมูลโดยละเอียดเกี่ยวกับการดำเนินการที่เกิดขึ้นภายในระบบ คุณสามารถใช้คำสั่งแก้ไขข้อบกพร่องเมื่อมีการป้อนหรือออกจากวิธีการ หรือที่ใดก็ตามที่คุณคิดว่าอาจเพิ่มมูลค่าระหว่างการแก้ไขข้อบกพร่อง74รหัส> :เมื่อใดก็ตามที่ระบบของคุณเปลี่ยนสถานะหรือมีเหตุการณ์ที่เกี่ยวข้องเกิดขึ้น ให้ไปที่89ระดับ ตัวอย่างข้อความข้อมูลทั่วไปในบริบทของแอปพลิเคชัน Rails ได้แก่ คำขอที่ได้รับ คำขอที่ส่งไปยัง API ภายนอก หรืองานที่เริ่มต้นและสิ้นสุด97รหัส> :ใช้บันทึกนี้เพื่อแสดงว่ามีบางสิ่งที่ไม่คาดคิดเกิดขึ้น ยังไม่ใช่ปัญหา (เนื่องจากใบสมัครของคุณสามารถจัดการได้) แต่หากยังเกิดขึ้นอีก ก็อาจรับประกันความสนใจของคุณ107รหัส> :ใช้ระดับบันทึกนี้เมื่อเกิดข้อผิดพลาด ข้อผิดพลาดคือสถานะแอปพลิเคชันที่ไม่ถูกต้องซึ่งคุณต้องแก้ไขโดยเร็วที่สุด
คุณสามารถเปลี่ยนประเภทของข้อความบันทึกที่แอปพลิเคชันของคุณเขียนได้โดยการแก้ไขไฟล์สภาพแวดล้อมที่เกี่ยวข้อง โดยปกติแล้ว Rails จะละทิ้ง 115 ข้อความอยู่ระหว่างการผลิต แต่คุณสามารถเปลี่ยนสิ่งนั้นได้
ลองใช้คำแนะนำระดับบันทึกด้านบนกับตัวอย่างโค้ดของเรา
เมื่อแก้ไขข้อบกพร่อง ขณะนี้เราสามารถระบุสาเหตุของปัญหาได้โดยดูที่ 128 และ 138รหัส> ข้อความ น่าเสียดายที่ข้อความบันทึกของเราไม่มีคำอธิบายอีกต่อไป
ข้อความบันทึกเชิงอธิบาย
ข้อความบันทึกคำอธิบายไม่มีที่ว่างสำหรับการตีความ โดยจะให้รายละเอียดที่จำเป็นเพื่อให้ผู้อ่านทราบทันทีเกี่ยวกับสิ่งที่เกิดขึ้น
เมื่อคุณอ่านข้อความเช่น 142 คุณคงสงสัยว่าข้อผิดพลาดคืออะไร คุณต้องการหลีกเลี่ยงความสับสนดังกล่าวเมื่อเขียนข้อความบันทึกของคุณ สิ่งที่สำคัญที่สุดในการเขียนข้อความบันทึกเชิงพรรณนาคือการสวมบทบาทเป็นผู้อ่านบันทึก พวกเขาจะได้รับข้อมูลทั้งหมดที่ต้องการเมื่ออ่านบันทึกของคุณหรือไม่
มาเปลี่ยนข้อความ 156 กันเถอะ ถึงข้อผิดพลาด รวมถึงข้อความด้วย
นั่นเป็นการปรับปรุง เรามาตรวจสอบข้อความบันทึกอื่นๆ ในตัวอย่างของเรากัน 161รหัส> ไม่ได้บอกเราว่าเรียกว่าเมธอดใด 172 ละเว้นการตอบสนองที่แท้จริงและ 181 ไม่ได้ให้ข้อมูลเกี่ยวกับลักษณะของความล้มเหลว มาเปลี่ยนกันเถอะ
หมายเหตุ :คุณอาจสังเกตเห็นว่าเราใช้ไวยากรณ์ของบล็อกเมื่อดำเนินการแก้ไขสตริงกับบันทึกของเรา การใช้หลีกเลี่ยงการคำนวณที่ไม่จำเป็นเมื่อระดับบันทึกของแอปพลิเคชันสูงกว่าระดับข้อความบันทึก ตัวอย่างเช่น194 จะดำเนินการต่อสตริงเสมอ แต่ 204 จะดำเนินการดังกล่าวเมื่อตั้งค่าระดับบันทึกเป็นแก้ไขข้อบกพร่องเท่านั้น ป>
บันทึกของเราอ่านได้ดีขึ้นมากตอนนี้ มีข้อสงสัยเล็กน้อยเกี่ยวกับความหมายของข้อความบันทึกแต่ละข้อความ
บริบทเพิ่มเติมสำหรับข้อความบันทึก
ข้อความบันทึกใหม่ของเราให้ภาพที่ชัดเจนของสิ่งที่เกิดขึ้น เนื่องจากนี่เป็นตัวอย่างง่ายๆ เราจึงมีความเข้าใจที่ดีว่าเหตุใดจึงมีเหตุการณ์บางอย่างเกิดขึ้น ในความเป็นจริง มันมักจะไม่ง่ายขนาดนั้น
การให้ข้อมูลเพิ่มเติมเกี่ยวกับบริบทที่ระบบเขียนแต่ละข้อความสามารถช่วยแก้ไขจุดบกพร่องได้อย่างมาก
ตัวอย่างเช่น เมื่อบันทึกคำขอหรือการตอบกลับ การทราบว่าใครเป็นผู้ดำเนินการคำขออาจเป็นประโยชน์ การแนบการติดตามสแต็กเพื่อหาข้อผิดพลาดอาจมีประโยชน์ เพื่อให้เราสามารถรวบรวมข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุที่เกิดข้อผิดพลาดได้
หมายเหตุ :คุณคงสังเกตเห็นว่าการสร้างข้อความบันทึกด้วยข้อมูลเชิงบริบทอาจเป็นเรื่องยุ่งยากเมื่อคุณใช้ตัวบันทึกเริ่มต้นของ Rails โชคดีที่โปรแกรมบันทึกแบบกำหนดเอง เช่น Ougai หรือMrLogaLoga ช่วยให้การดำเนินการนี้ง่ายขึ้นมาก ป>
การบันทึกแบบมีโครงสร้าง
เมื่อคุณทำให้มนุษย์สามารถอ่านบันทึกได้ คุณก็พร้อมที่จะยกระดับสิ่งต่างๆ ขึ้นไป ตอนนี้ คุณต้องทำให้เครื่องสามารถอ่านบันทึกของคุณได้ เพื่อนำไปใช้ในการตรวจสอบและวิเคราะห์ข้อมูลได้
รูปแบบที่ผมใช้คือ JSON แต่คุณอาจต้องการรูปแบบบันทึกอื่นๆ เช่น Logstash ขึ้นอยู่กับเครื่องมือที่คุณใช้ คุณสามารถเปลี่ยนรูปแบบของข้อความบันทึกได้โดยการสร้างตัวจัดรูปแบบบันทึกที่กำหนดเอง
แทนที่จะเขียนตัวจัดรูปแบบแบบกำหนดเองด้วยตัวเอง คุณสามารถใช้หนึ่งในหลาย gem ที่ให้ตัวจัดรูปแบบบันทึกแบบกำหนดเองได้ Irecommend Lograge ซึ่งไม่เพียงแต่นำเสนอการจัดรูปแบบที่พร้อมใช้งานทันที แต่ยังทำความสะอาดการจัดรูปแบบคำขอที่ค่อนข้างละเอียดของ Rails อีกด้วย ดังนั้นจึงอ่านได้ง่ายขึ้นมาก
การบันทึก Rails ด้วย AppSignal
ตอนนี้บันทึกของคุณสวยงามและอ่านง่ายแล้ว จะทำให้เข้าถึงได้มากขึ้นคงจะดี ท้ายที่สุดแล้ว คุณไม่ต้องการ SSH เข้าไปในเครื่องบางเครื่องและหางหรือ grep บันทึกที่นั่นใช่ไหม
โชคดีที่ AppSignal เพิ่งเปิดตัวฟีเจอร์การบันทึกในรุ่นเบต้า! ซึ่งช่วยให้คุณตรวจสอบและวิเคราะห์บันทึก Rails ได้โดยตรงบนเว็บอินเทอร์เฟซของ AppSignal
คุณสามารถเข้าถึงเบต้าการบันทึกของเราได้ผ่านทางแท็บ "การบันทึก" ในเมนูด้านซ้ายมือ:

หากคุณทำตามขั้นตอนในเอกสารการบันทึก Ruby คุณสามารถกำหนดค่า Rails Logger ให้ใช้ 217 คลาสโดยวางโค้ดด้านล่างใน 221 ไฟล์ก่อน 232 :
คุณยังนำเข้าบันทึกที่มีโครงสร้างในรูปแบบ JSON หรือ Lograge ได้ด้วย
เมื่อคุณตั้งค่าทุกอย่างแล้ว คุณจะเห็นบันทึก Rails ของคุณแสดงบน AppSignal!

การบันทึกและการรายงานข้อผิดพลาด
คุณกำลังอ่านข้อความนี้ในบล็อกของ AppSignal ดังนั้นคุณอาจสงสัยว่า:ทำไมฉันจึงควรสนใจเรื่องการบันทึก หากฉันใช้แพลตฟอร์มการรายงานข้อผิดพลาดที่ดีอยู่แล้ว
มันเป็นคำถามที่ดี เครื่องมือติดตามข้อผิดพลาดให้ข้อมูลโดยละเอียดเกี่ยวกับข้อผิดพลาดของแอปพลิเคชัน โดยจะบันทึกการติดตามข้อผิดพลาดของแอปพลิเคชันทั้งหมดและให้ข้อมูลบริบทจำนวนมากทันที
อย่างไรก็ตาม แม้ว่าเครื่องมือส่วนใหญ่จะอนุญาตให้คุณบันทึกเหตุการณ์อื่นนอกเหนือจากข้อผิดพลาด แต่โดยทั่วไปแล้วการส่งข้อความจำนวนเท่าใดก็ได้ตามอำเภอใจนั้นเป็นไปไม่ได้ คุณจะไม่สามารถแทนที่ข้อมูลประวัติโดยละเอียดที่ได้รับจากบันทึกที่เขียนไว้อย่างดีได้
ในความเป็นจริง การเพิ่มบันทึกที่เขียนไว้อย่างดีและรองรับเครื่องมือติดตามข้อผิดพลาด คุณควรใช้ทั้งสองอย่าง
สรุป
ในโพสต์นี้ เราได้พิจารณาว่าคุณจะใช้บันทึกให้เกิดประโยชน์สูงสุดได้อย่างไร เราพบว่าการเริ่มต้นเข้าสู่ระบบ Rails เป็นเรื่องง่าย แต่การเขียนบันทึกที่เป็นประโยชน์อาจเป็นเรื่องท้าทาย
บันทึกที่ไม่มีคำอธิบายหรือบริบทจะจบลงเพียงการเติมดิสก์ของคุณโดยให้คุณค่าเพียงเล็กน้อย อย่างไรก็ตาม บันทึกที่ใช้ระดับบันทึกที่ถูกต้องและให้ข้อมูลที่ผู้อ่านต้องการถือเป็นทรัพย์สินที่ดี
เมื่อคุณเชี่ยวชาญการเขียนข้อความบันทึกที่ยอดเยี่ยมแล้ว คุณสามารถพัฒนาสิ่งต่างๆ เพิ่มเติมและจัดรูปแบบข้อความในลักษณะที่ช่วยให้สามารถวิเคราะห์ forlog และกรองได้ง่าย
นอกจากนี้เรายังได้สำรวจวิธีที่คุณสามารถใช้คุณสมบัติการบันทึกใหม่ของ AppSignal เพื่อเข้าถึงบันทึกของคุณได้อย่างง่ายดาย สุดท้ายนี้ เราได้กล่าวถึงวิธีที่บันทึกควรเพิ่มเครื่องมือติดตามข้อผิดพลาดแทนที่จะแทนที่บันทึกเหล่านั้น
ขอให้มีความสุขกับการบันทึก!
ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว! ป>
ฮันส์-ยอร์ก ชเนดลิทซ์
Hans ผู้เขียนรับเชิญของเราเป็นวิศวกรของ Rails จากเวียนนา ประเทศออสเตรีย เขาใช้เวลาส่วนใหญ่ในการเขียนโค้ดหรืออ่านหนังสือเกี่ยวกับการเขียนโค้ด และบางครั้งก็เขียนเกี่ยวกับเรื่องนี้ในบล็อกของเขาด้วยซ้ำ! เมื่อเขาไม่ได้นั่งอยู่หน้าจอ คุณอาจพบเขากำลังปีนเขาอยู่ข้างนอก
บทความทั้งหมดโดย Hans-Jörg Schnedlitz