log4js เป็นหนึ่งในโมดูลที่ดีที่สุดในการประมวลผลบันทึก Node.js เมื่อเทียบกับคอนโซลหรือ TJ Debug ต่อไปนี้เป็นสิ่งที่ขาดไม่ได้สำหรับโครงการ Node.js ที่นำไปใช้ในการผลิต:
บทความนี้จะให้คำแนะนำที่ครอบคลุมเกี่ยวกับ log4js ที่ครอบคลุมช่วยให้คุณสามารถใช้ log4js ในโครงการของคุณได้อย่างง่ายดายการพัฒนาที่ง่ายและการดีบักและการตรวจสอบหรือแก้ไขปัญหาออนไลน์ที่ดีขึ้น
การทดสอบเล็ก ๆ
รหัสสามบรรทัดต่อไปนี้แสดงให้คุณเห็นการใช้งานที่ง่ายที่สุดของ log4js:
// ไฟล์: simplest.jsvar log4js = ต้องการ ('log4js'); var logger = log4js.getLogger (); logger.debug ("เวลา:", วันที่ใหม่ ());การโทร. getLogger () สามารถรับอินสแตนซ์ log4js logger การใช้งานของอินสแตนซ์นี้เหมือนกับคอนโซล คุณสามารถโทร. debug (เช่น. info,. error และวิธีอื่น ๆ ) ไปยังบันทึกเอาต์พุต
เรียกใช้โหนดง่ายที่สุด js และเอาต์พุตมีดังนี้:
$ node simplest.js [2016-08-21 00: 01: 24.852] [debug] [ค่าเริ่มต้น]-เวลา: 2016-08-20T16: 01: 24.852Z
เวลา: 2016-08-20T16: 01: 24.852Z เป็นสิ่งที่เราต้องการส่งออก อันก่อนหน้านี้มีตัวระบุ [2016-08-21 00: 01: 24.852] [DEBUG] [ค่าเริ่มต้น] จะแสดงรายการในภายหลัง
มันใช้งานง่ายมากเหรอ? ก่อนที่เราจะดำน้ำในการใช้งานขั้นสูงของ log4js ก่อนอื่นมาทำความคุ้นเคยกับแนวคิดใน log4js
ระดับ
นี่ไม่ใช่เรื่องยากที่จะเข้าใจมันคือการให้คะแนนของบันทึก เฉพาะเมื่อบันทึกเป็นลำดับชั้นเท่านั้นที่สามารถบันทึก 4Js ให้แสดงบันทึกของเราได้ดีขึ้น (ระดับของบันทึกที่แตกต่างกันใช้สีที่แตกต่างกันในคอนโซลเช่นข้อผิดพลาดมักจะเป็นสีแดง) และเมื่อการผลิตคุณสามารถเลือกบันทึกการส่งออกเช่นการหลีกเลี่ยงข้อมูลที่ละเอียดอ่อนบางอย่างที่เป็นของ. debugs รั่วไหล
บันทึกของ log4js แบ่งออกเป็นเก้าระดับและชื่อและน้ำหนักของแต่ละระดับมีดังนี้:
{ทั้งหมด: ระดับใหม่ (number.min_value, "All"), การติดตาม: ระดับใหม่ (5000, "Trace"), การดีบัก: ระดับใหม่ (10,000, "debug"), ข้อมูล: ระดับใหม่ (20000, "info"), เตือน: ระดับใหม่ (30000, "Warn"), ข้อผิดพลาด ระดับ (9007199254740992, "mark"), // 2^53 ปิด: ระดับใหม่ (number.max_value, "ปิด")}ภาพก่อนหน้า:
ทั้งหมดปิดสองระดับนี้ไม่ได้ใช้โดยตรงในรหัสธุรกิจ ส่วนที่เหลืออีกเจ็ดวิธีที่สอดคล้องกับอินสแตนซ์ของ Logger, .trace .debug .info ... กล่าวอีกนัยหนึ่งเมื่อคุณเรียกวิธีการเหล่านี้มันจะเทียบเท่ากับการปรับระดับบันทึกเหล่านี้ ดังนั้นก่อนหน้านี้ [2016-08-21 00: 01: 24.852] [debug] [ค่าเริ่มต้น]-เวลา: 2016-08-20T16: 01: 24.852Z เป็นระดับของบันทึกนี้
พิมพ์
log4js ยังมีแนวคิดที่เรียกว่าหมวดหมู่ (ประเภท) คุณสามารถตั้งค่าประเภทของอินสแตนซ์ Logger และแยกความแตกต่างของบันทึกตามมิติอื่น:
// ไฟล์: set-catetory.jsvar log4js = require ('log4js'); var logger = log4js.getLogger ('ตัวอย่าง'); logger.debug ("เวลา:", วันที่ใหม่ ());เมื่อได้รับอินสแตนซ์ตัวบันทึกผ่าน getLogger พารามิเตอร์เดียวที่สามารถส่งผ่านคือ LogGerCategory (เช่น 'ตัวอย่าง') พารามิเตอร์นี้ระบุว่าอินสแตนซ์ของ Logger เป็นของ นี่เหมือนกับการดีบักของ TJ:
var debug = ต้องการ ('debug') ('คนงาน'); setInterval (function () {debug ('ทำงานบางอย่าง');}, 1,000);ในการดีบัก 'คนงาน' มันยังเป็นการจำแนกประเภทบันทึก ตกลงกลับมาและเรียกใช้โหนด set-catetory.js:
[2016-08-21 01: 16: 00.212] [debug] ตัวอย่าง-เวลา: 2016-08-20T17: 16: 00.212Z
ความแตกต่างเพียงอย่างเดียวจาก [2016-08-21 00: 01: 24.852] [debug] [ค่าเริ่มต้น]-เวลา: 2016-08-20T16: 01: 24.852Z คือ [ค่าเริ่มต้น] ได้กลายเป็นตัวอย่าง
การใช้หมวดหมู่คืออะไร? มันมีความยืดหยุ่นมากกว่าระดับและให้มิติความแตกต่างที่สองสำหรับบันทึก ตัวอย่างเช่นคุณสามารถตั้งค่าหมวดหมู่ที่แตกต่างกันสำหรับแต่ละไฟล์เช่นใน set-catetory.js:
// ไฟล์: set-catetory.jsvar log4js = require ('log4js'); var logger = log4js.getLogger ('set-catetory.js'); logger.debug ("เวลา:", วันที่ใหม่ ();คุณสามารถดูได้จากบันทึก [2016-08-21 01: 24: 07.332] [debug] set-catetory.js-เวลา: 2016-08-20T17: 24: 07.331Z ว่าบันทึกนี้มาจากไฟล์ Set-Catetory.js หรือใช้หมวดหมู่ที่แตกต่างกันสำหรับแพ็คเกจโหนดที่แตกต่างกันเพื่อให้คุณสามารถแยกความแตกต่างของโมดูลที่บันทึกมาจาก
ส่ง
ตอนนี้บันทึกมีระดับและหมวดหมู่ซึ่งแก้ปัญหาการให้คะแนนและการจำแนกประเภทของบันทึกที่ทางเข้า ใน log4js ปัญหาการส่งออกบันทึก (เช่นที่เอาต์พุตบันทึกเอาต์พุต) ได้รับการแก้ไขโดย Appender
Appender เริ่มต้น
ต่อไปนี้คือการตั้งค่า Appender เริ่มต้นสำหรับ log4js ภายใน:
// log4js.jsdefaultconfig = {apapenders: [{type: "console"}]}อย่างที่คุณเห็นเมื่อบันทึกไม่ได้รับการกำหนดค่าในทางใดทางหนึ่งบันทึกจะถูกส่งไปยังคอนโซลโดยค่าเริ่มต้น
ตั้งค่า Appender ของคุณเอง
เราสามารถตั้งค่า Appender ที่เราต้องการผ่าน log4js.configure
// ไฟล์: custom-appender.jsvar log4js = require ('log4js'); log4js.configure ({appenders: [{type: 'ไฟล์', ชื่อไฟล์: 'default.log'}]}) var = log4js.getLoggerในตัวอย่างข้างต้นเราส่งออกบันทึกไปยังไฟล์และเรียกใช้รหัส log4js สร้างไฟล์ชื่อ default.log ในไดเรกทอรีปัจจุบัน [2016-08-21 08: 43: 21.272] [DEBUG] Custom-Appender-เวลา: 2016-08-21T00: 43: 21.272Z เอาต์พุตไปยังไฟล์
Appender จัดทำโดย log4js
คอนโซลและไฟล์เป็นทั้งคู่ที่จัดทำโดย log4js นอกเหนือจากนี้:
DateFile: บันทึกคือเอาต์พุตไปยังไฟล์และไฟล์บันทึกสามารถเลื่อนได้ในโหมดวันที่เฉพาะเช่นเอาต์พุตไปยังค่าเริ่มต้น -2016-08-21.LOG วันนี้และเอาต์พุตไปที่ค่าเริ่มต้น -2016-08-22.LOG ในวันพรุ่งนี้;
SMTP: บันทึกเอาต์พุตไปยังอีเมล;
MailGun: บันทึกเอาต์พุตไปยัง MailGun ผ่าน MailGun API;
levelfilter สามารถกรองผ่านระดับ;
และอื่น ๆ บางส่วนของภาคผนวกคุณสามารถดูรายการทั้งหมดได้ที่นี่
ระดับการกรองและหมวดหมู่
เราสามารถปรับการกำหนดค่าของ Appender และกรองระดับบันทึกและหมวดหมู่:
// ไฟล์: level-and-category.jsvar log4js = require ('log4js'); log4js.configure ({appenders: [{type: 'loglevelfilter', ระดับ: 'debug', หมวดหมู่: 'category1', Appender: {ประเภท: 'ไฟล์', filename: log4js.getLogger ('category1'); var logger2 = log4js.getLogger ('category2'); logger1.debug ("เวลา:", วันที่ใหม่ ()); logger1.trace ("เวลา:", วันที่ใหม่ ()); logger2.debugเรียกใช้เพิ่มบันทึกเป็น default.log:
[2016-08-21 10: 08: 21.630] [DEBUG] หมวดหมู่ 1-เวลา: 2016-08-21T02: 08: 21.629Z
ลองดูที่รหัส:
ใช้ loglevelfilter และระดับเพื่อกรองระดับบันทึกและบันทึกทั้งหมดที่มีน้ำหนักมากกว่าหรือเท่ากับการดีบักจะถูกส่งออก นี่เป็นความสำคัญของน้ำหนักระดับบันทึกที่กล่าวถึงก่อนหน้านี้
เลือกหมวดหมู่เพื่อส่งออกบันทึกผ่านหมวดหมู่ บันทึกภายใต้หมวดที่ 2 จะถูกกรองออก การกำหนดค่ายังยอมรับอาร์เรย์เช่น ['category1', 'category2'] เพื่อให้บันทึกทั้งสองประเภทจะถูกส่งไปยังไฟล์
เค้าโครง
เลย์เอาต์เป็นคุณสมบัติขั้นสูงที่จัดทำโดย log4js ผ่านเลย์เอาต์เราสามารถปรับแต่งรูปแบบของบันทึกเอาต์พุตแต่ละรายการ log4js มีรูปแบบในตัวสี่ประเภท:
MessagePassthrough: ส่งออกเนื้อหาของบันทึกเท่านั้น
พื้นฐาน: เวลาระดับบันทึกและหมวดหมู่จะถูกเพิ่มก่อนเนื้อหาของบันทึกและเค้าโครงเริ่มต้นของบันทึกมักจะถูกเพิ่ม;
สี/สี: เพิ่มสีลงในบันทึกบนพื้นฐานของ BASIC คอนโซล Appender ใช้เลย์เอาต์นี้ตามค่าเริ่มต้น
รูปแบบ: นี่เป็นประเภทพิเศษที่สามารถใช้เพื่อกำหนดรูปแบบใด ๆ ที่คุณต้องการ
ตัวอย่างของรูปแบบ:
// ไฟล์: layout -pattern.jsvar log4js = require ('log4js'); log4js.configure ({appenders: [{type: 'console', layout: {type: 'pattern', รูปแบบ: '[%r] log4js.getLogger ('layout-pattern'); logger.debug ("เวลา:", วันที่ใหม่ ());%r %p $ m $ n เป็นตัวระบุในตัวสำหรับ log4js คุณสามารถใช้สิ่งนี้เพื่อส่งออกข้อมูลเมตา สำหรับรายละเอียดเพิ่มเติมคุณสามารถอ้างถึงเอกสาร Log4JS
มาอธิบายการวางตำแหน่งของคนตัดไม้, appender และเลย์เอาต์ในรูปภาพ
การต่อสู้ที่ใช้งานได้จริง: บันทึกการเข้าถึงเอาต์พุต log.log สำหรับแอปพลิเคชันโหนด
เพื่ออำนวยความสะดวกในการตรวจสอบปัญหาบันทึกการร้องขอแอปพลิเคชันที่เข้าและออกมักจะถูกบันทึกไว้ในสภาพแวดล้อมการผลิต จะใช้งานได้อย่างไรโดยใช้ log4js? เพียงป้อนรหัส:
// ไฟล์: server.jsvar log4js = ต้องการ ('log4js'); var express = ต้องการ ('express'); log4js.configure ({appenders: [{type: 'datefile', filename: 'access.log', รูปแบบ: '-yyy-mm-dd.log' Express (); app.use (log4js.connectlogger (log4js.getLogger ('access'), {ระดับ: log4js.levels.info}))); app.get ('/' ฟังก์ชั่น (req, res)ดูว่าเราทำอะไร:
Appender ได้รับการกำหนดค่าให้เลือกบันทึกด้วยการเข้าถึงหมวดหมู่จากบันทึกและส่งออกไปยังไฟล์เลื่อน
log4js.getLogger ('Access') ได้รับอินสแตนซ์ Logger ที่มีการเข้าถึงหมวดหมู่และส่งผ่านไปยังมิดเดิลแวร์ Log4js.ConnectLogger มิดเดิลแวร์นี้รวบรวมข้อมูลการเข้าถึงและพิมพ์ผ่านอินสแตนซ์นี้
เริ่มต้นเซิร์ฟเวอร์และเยี่ยมชม http: // localhost: 5000 คุณจะพบว่ามีไฟล์เพิ่มเติมชื่อ access.log-2016-08-21.log ในไดเรกทอรีซึ่งมีสองบันทึก:
[2016-08-21 14: 34: 04.752] [ข้อมูล] การเข้าถึง - :: 1 - - "Get/http/1.1" 200 18 "" "Mozilla/5.0 (Macintosh; Intel Mac OS x 10_11_0) Applewebkit/537.36
[2016-08-21 14: 34: 05.002] [ข้อมูล] การเข้าถึง - :: 1 - - "get /favicon.ico http/1.1" 404 24 "http: // localhost: 5000/" "mozilla/5.0 (macintosh; intel mac os x 10_11_0) Chrome/52.0.2743.116 Safari/537.36 "
ผ่านฟังก์ชั่นการจำแนกประเภทและ Appender ของบันทึก log4js เราส่งออกบันทึกการเข้าถึงไปยังไฟล์ที่อัปเดตสกรอลล์
สรุป
บทความนี้แนะนำการใช้งานของ log4js อย่างครอบคลุม เมื่อเปรียบเทียบกับเครื่องมือการบันทึกคอนโซลหรือการบันทึกอย่างง่าย Log4JS นั้นมีความซับซ้อนมากขึ้นในการใช้งานและแน่นอนว่ามีประสิทธิภาพมากขึ้นและเหมาะสำหรับแอปพลิเคชันระดับการผลิต หากคุณสนใจโปรดฝากข้อความเพื่อบอกเรา ถัดไปคุณอาจแนะนำวิธีจัดการการกำหนดค่าในแอปพลิเคชันโหนด