ไฟล์บันทึกของ Symfony จะได้รับการจัดรูปแบบในลักษณะเดียวกันสำหรับทุกสภาพแวดล้อม ซึ่งหมายความว่า dev.log
ได้รับการปรับให้เหมาะกับเครื่องจักรแทนที่จะเป็นมนุษย์ ผลลัพธ์ที่ได้คือไฟล์บันทึกที่เต็มไปด้วยข้อมูลที่ไร้ประโยชน์ซึ่งทำให้คุณมีประสิทธิผลน้อยลง
EasyLogHandler เป็นตัวจัดการ Monolog ใหม่ที่สร้างไฟล์บันทึกที่เป็นมิตรต่อมนุษย์ ได้รับการปรับให้เหมาะสมเพื่อแสดงข้อมูลบันทึกในลักษณะที่ชัดเจนและรัดกุม ใช้ในสภาพแวดล้อมการพัฒนาเพื่อเป็นนักพัฒนาที่มีประสิทธิผลมากขึ้น
คุณสมบัติ
การติดตั้ง
การกำหนดค่าและการใช้งาน
นี่คือคุณสมบัติที่ดีที่สุดของ EasyLogHandler และการเปรียบเทียบตัวเองกับบันทึกเริ่มต้นของ Symfony
ไฟล์บันทึกของ Symfony เป็นข้อความจำนวนมาก เมื่อคุณเปิดขึ้นมา คุณจะไม่สามารถบอกได้อย่างง่ายดายว่าคำขอเริ่มต้นหรือเสร็จสิ้นเมื่อใด และข้อความบันทึกใดอยู่ด้วยกัน:
ซิมโฟนี่ | EasyLogHandler |
---|---|
EasyLogHandler จัดโครงสร้างไฟล์บันทึกในลักษณะที่แตกต่างออกไป:
โดยจะเพิ่มส่วนหัวขนาดใหญ่และบรรทัดใหม่เพื่อแยกบันทึกคำขอแต่ละรายการ
หากคำขอมีความสำคัญน้อยกว่า (เช่น คำขอที่สินทรัพย์) ส่วนหัวจะมีขนาดกะทัดรัดและแสดงข้อมูลน้อยลง
ข้อความบันทึกจะถูกแบ่งภายในเพื่อให้คุณเข้าใจส่วนต่างๆ ได้ดีขึ้น (คำขอ หลักคำสอน ความปลอดภัย ฯลฯ)
ประการแรก EasyLogHandler จะไม่แสดงการประทับเวลาในทุกข้อความบันทึก ในสภาพแวดล้อม dev
คุณไม่ควรสนใจสิ่งนั้น ดังนั้นการประทับเวลาจะแสดงเพียงครั้งเดียวสำหรับข้อความบันทึกแต่ละกลุ่ม
ซิมโฟนี่ | EasyLogHandler |
---|---|
ข้อมูล extra
ซึ่งบางข้อความบันทึกรวมไว้เพื่อเพิ่มรายละเอียดเพิ่มเติมเกี่ยวกับบันทึก จะแสดงเฉพาะเมื่อแตกต่างจากบันทึกก่อนหน้าเท่านั้น ในทางตรงกันข้าม Symfony จะแสดง extra
สำหรับบันทึกทั้งหมดเสมอ โดยสร้างข้อมูลที่ซ้ำกันจำนวนมาก:
ซิมโฟนี่ |
---|
EasyLogHandler |
---|
กำลังเป็นที่นิยมมากขึ้นในการใช้ตัวยึดตำแหน่งในข้อความบันทึกแทนค่าจริง (เช่น Matched route "{route}".
แทนที่จะเป็น Matched route "home".
) ซึ่งเหมาะสำหรับเครื่อง เนื่องจากสามารถจัดกลุ่มข้อความที่คล้ายกันซึ่งแตกต่างกันไปใน ค่าตัวยึดตำแหน่ง
อย่างไรก็ตาม สำหรับมนุษย์ "คุณลักษณะ" นี้กำลังรบกวนจิตใจ นั่นเป็นสาเหตุที่ EasyLogHandler แทนที่ตัวยึดตำแหน่งใดๆ ที่รวมอยู่ในข้อความบันทึกโดยอัตโนมัติ:
ซิมโฟนี่ |
---|
EasyLogHandler |
---|
องค์ประกอบที่สำคัญ เช่น การเลิกใช้งานและข้อความที่เกี่ยวข้องกับความปลอดภัย จะต้องโดดเด่นในไฟล์บันทึกเพื่อช่วยให้คุณมองเห็นได้ทันที อย่างไรก็ตาม ใน Symfony บันทึกทั้งหมดจะมีลักษณะเหมือนกันทุกประการ คุณจะรู้ได้อย่างไรว่าอันไหนสำคัญ?
ซิมโฟนี่ |
---|
(ข้อความทั้งหมดมีลักษณะเหมือนกันทุกประการ) |
EasyLogHandler |
---|
(การเลิกใช้งาน คำเตือน ข้อผิดพลาด และข้อความด้านความปลอดภัยมีความโดดเด่น) |
ข้อความบันทึกมักจะมีตัวแปรที่เกี่ยวข้องใน context
และคุณสมบัติ extra
การแสดงเนื้อหาของตัวแปรเหล่านี้ในไฟล์บันทึกถือเป็นความสมดุลที่ยากลำบากระหว่างความสามารถในการอ่านและความกระชับ
EasyLogHandler ตัดสินใจว่าจะแทรกตัวแปรเหล่านี้แบบไดนามิกอย่างไร โดยขึ้นอยู่กับข้อความบันทึกแต่ละรายการ ตัวอย่างเช่น พารามิเตอร์การสืบค้นหลักคำสอนจะถูกอินไลน์เสมอ แต่พารามิเตอร์คำขอจะถูกอินไลน์สำหรับคำขอที่ไม่สำคัญและซ้อนกันสำหรับคำขอที่สำคัญ:
เมื่อข้อความบันทึกมีการติดตามสแต็กข้อผิดพลาด คุณจะต้องพิจารณาข้อความเหล่านั้นอย่างแน่นอน อย่างไรก็ตาม Symfony จะแสดงสแต็กเทรซแบบอินไลน์ ทำให้ไม่สามารถตรวจสอบได้ EasyLogHandler จะแสดงเป็นการติดตามสแต็กที่เหมาะสม:
ซิมโฟนี่ |
---|
EasyLogHandler |
---|
ประสบการณ์ที่น่าหงุดหงิดที่สุดประการหนึ่งเมื่อตรวจสอบไฟล์บันทึกคือการมีข้อความซ้ำหรือคล้ายกันจำนวนมากติดต่อกัน พวกเขาให้ข้อมูลเพียงเล็กน้อยและทำให้คุณเสียสมาธิ EasyLogHandler ประมวลผลข้อความบันทึกทั้งหมดในครั้งเดียว แทนที่จะประมวลผลทีละข้อความ ดังนั้นจึงทราบเมื่อมีบันทึกต่อเนื่องกันที่คล้ายกัน
ตัวอย่างเช่น นี่คือไฟล์บันทึกของ Symfony ที่แสดงข้อความแปลที่ขาดหายไปติดต่อกันสามข้อความ:
และนี่คือวิธีที่ EasyLogHandler แสดงข้อความเดียวกัน:
ความแตกต่างจะยิ่งชัดเจนยิ่งขึ้นสำหรับข้อความ "แจ้งเตือนเหตุการณ์" ซึ่งโดยปกติจะสร้างข้อความติดต่อกันหลายสิบข้อความ:
ซิมโฟนี่ |
---|
EasyLogHandler |
---|
โปรเจ็กต์นี้เผยแพร่เป็นแพ็คเกจ PHP แทนที่จะเป็นบันเดิล Symfony ดังนั้นคุณเพียงแค่ต้องการโปรเจ็กต์ที่มี Composer:
$ ผู้แต่งต้องการ --dev easycorp/easy-log-handler
กำหนดบริการใหม่ในแอปพลิเคชันของคุณสำหรับตัวจัดการบันทึกนี้:
เวอร์ชัน Symfony ที่ใหม่กว่า:
# config/packages/dev/easy_log_handler.yamlservices:EasyCorpEasyLogEasyLogHandler:public: falsearguments: ['%kernel.logs_dir%/%kernel.environment%.log']
Symfony เวอร์ชันเก่ากว่า:
# app/config/services.ymlservices:# ...easycorp.easylog.handler:class: EasyCorpEasyLogEasyLogHandlerpublic: falsearguments: - '%kernel.logs_dir%/%kernel.environment%.log'
อัปเดตการกำหนดค่า Monolog ของคุณในสภาพแวดล้อม dev
เพื่อกำหนดตัวจัดการแบบบัฟเฟอร์ที่ล้อมรอบบริการตัวจัดการใหม่นี้ (อ่านต่อเพื่อทำความเข้าใจว่าทำไม) คุณสามารถคัดลอกและวางการกำหนดค่านี้ได้อย่างปลอดภัย:
เวอร์ชัน Symfony ที่ใหม่กว่า:
# config/packages/dev/monolog.yamlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ['!event']level: debugeasylog:type: serviceid: EasyCorpEasyLogEasyLogHandler
Symfony เวอร์ชันเก่ากว่า:
# app/config/config_dev.ymlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ["!event"]ระดับ: debugeasylog:type: serviceid: easycorp.easylog.handler
ตัวจัดการบันทึกส่วนใหญ่จะปฏิบัติต่อแต่ละข้อความบันทึกแยกกัน ในทางตรงกันข้าม การประมวลผลบันทึกขั้นสูงของ EasyLogHandler กำหนดให้แต่ละข้อความบันทึกต้องทราบถึงบันทึกอื่นๆ (เช่น เพื่อรวมข้อความที่ต่อเนื่องกันที่คล้ายกัน) ซึ่งหมายความว่าบันทึกทั้งหมดที่เกี่ยวข้องกับคำขอจะต้องถูกบันทึกและประมวลผลเป็นชุด
ในการกำหนดค่าข้างต้น ตัวจัดการ buffered
จะบันทึกข้อความบันทึกทั้งหมดแล้วส่งต่อไปยังตัวจัดการ EasyLog ซึ่งจะประมวลผลข้อความทั้งหมดในครั้งเดียวและเขียนผลลัพธ์ลงในไฟล์บันทึก
ใช้ตัวจัดการ buffered
เพื่อกำหนดค่าช่องที่บันทึก/แยกออก และระดับของข้อความที่กำลังบันทึก