logologo
เริ่มต้น
คู่มือ
การพัฒนา
ปลั๊กอิน
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
เริ่มต้น
คู่มือ
การพัฒนา
ปลั๊กอิน
API
logologo

เริ่มต้นใช้งานฉบับย่อ

ภาพรวมการพัฒนาปลั๊กอิน
การเขียนปลั๊กอินแรกของคุณ
โครงสร้างไดเรกทอรีโปรเจกต์

การพัฒนาฝั่งเซิร์ฟเวอร์

ภาพรวม
ปลั๊กอิน
คอลเลกชัน
การดำเนินการฐานข้อมูล
การจัดการแหล่งข้อมูล
การจัดการทรัพยากร
การควบคุมการเข้าถึง (ACL)
มิดเดิลแวร์
แคช
เหตุการณ์
คอนเท็กซ์คำขอ
สคริปต์การย้ายข้อมูล
ล็อก
การทำให้เป็นสากล (I18n)
คำสั่ง
การจัดการงานที่กำหนดเวลา
การทดสอบ

การพัฒนาฝั่งไคลเอนต์

ภาพรวม
ปลั๊กอิน
คอนเท็กซ์
เราเตอร์
การควบคุมการเข้าถึง (ACL)
การจัดการแหล่งข้อมูล
ทรัพยากร
คำขอ
สไตล์และธีม
ล็อก
การทำให้เป็นสากล (I18n)
การทดสอบ

อื่นๆ

คู่มือการอัปเกรดปลั๊กอิน
รายการภาษา
การจัดการ Dependencies
การสร้าง
Previous Pageสไตล์และธีม
Next Pageการทำให้เป็นสากล (I18n)
TIP

เอกสารนี้แปลโดย AI หากมีข้อมูลที่ไม่ถูกต้อง โปรดดูเวอร์ชันภาษาอังกฤษ

#ระบบ Logger

NocoBase มีระบบบันทึก Log ที่มีประสิทธิภาพสูง ซึ่งพัฒนาขึ้นโดยใช้ pino เป็นพื้นฐานครับ ในทุกที่ที่คุณสามารถเข้าถึง context ได้ คุณสามารถเรียกใช้งาน logger instance ได้ผ่าน ctx.logger เพื่อใช้บันทึก Log สำคัญๆ ระหว่างการทำงานของปลั๊กอินหรือระบบครับ

#การใช้งานเบื้องต้น

// บันทึกข้อผิดพลาดร้ายแรง (เช่น การเริ่มต้นระบบล้มเหลว)
ctx.logger.fatal('Application initialization failed', { error });

// บันทึกข้อผิดพลาดทั่วไป (เช่น การเรียก API ผิดพลาด)
ctx.logger.error('Data loading failed', { status, message });

// บันทึกข้อความเตือน (เช่น ความเสี่ยงด้านประสิทธิภาพ หรือการทำงานของผู้ใช้ผิดปกติ)
ctx.logger.warn('Current form contains unsaved changes');

// บันทึกข้อมูลการทำงานทั่วไป (เช่น คอมโพเนนต์โหลดเสร็จสมบูรณ์)
ctx.logger.info('User profile component loaded');

// บันทึกข้อมูลสำหรับดีบัก (เช่น การเปลี่ยนแปลงสถานะ)
ctx.logger.debug('Current user state', { user });

// บันทึกข้อมูลการติดตามอย่างละเอียด (เช่น ขั้นตอนการเรนเดอร์)
ctx.logger.trace('Component rendered', { component: 'UserProfile' });

เมธอดเหล่านี้จะสอดคล้องกับระดับ Log ที่แตกต่างกัน (จากสูงไปต่ำ) ครับ:

ระดับเมธอดคำอธิบาย
fatalctx.logger.fatal()ข้อผิดพลาดร้ายแรง ซึ่งมักจะทำให้โปรแกรมหยุดทำงาน
errorctx.logger.error()Log ข้อผิดพลาด ที่บ่งชี้ว่าคำขอหรือการดำเนินการล้มเหลว
warnctx.logger.warn()ข้อมูลเตือน ที่แจ้งเตือนถึงความเสี่ยงที่อาจเกิดขึ้น หรือสถานการณ์ที่ไม่คาดคิด
infoctx.logger.info()ข้อมูลการทำงานทั่วไป
debugctx.logger.debug()ข้อมูลสำหรับดีบัก ใช้สำหรับสภาพแวดล้อมการพัฒนา
tracectx.logger.trace()ข้อมูลการติดตามอย่างละเอียด มักใช้สำหรับการวินิจฉัยเชิงลึก

#รูปแบบของ Log

Log แต่ละรายการจะถูกส่งออกในรูปแบบ JSON ที่มีโครงสร้าง โดยมีฟิลด์ต่อไปนี้เป็นค่าเริ่มต้นครับ:

ฟิลด์ประเภทคำอธิบาย
levelnumberระดับ Log
timenumberTimestamp (มิลลิวินาที)
pidnumberID ของ Process
hostnamestringชื่อโฮสต์
msgstringข้อความ Log
Othersobjectข้อมูล Context ที่กำหนดเอง

ตัวอย่างผลลัพธ์:

{
  "level": 30,
  "time": 1730540153064,
  "pid": 12765,
  "hostname": "nocobase.local",
  "msg": "HelloModel rendered",
  "a": "a"
}

#การผูก Context

ctx.logger จะทำการแทรกข้อมูล context โดยอัตโนมัติ เช่น ปลั๊กอิน โมดูล หรือแหล่งที่มาของคำขอปัจจุบัน ทำให้สามารถติดตามแหล่งที่มาของ Log ได้อย่างแม่นยำยิ่งขึ้นครับ

plugin.context.logger.info('Plugin initialized');
model.context.logger.error('Model validation failed', { model: 'User' });

ตัวอย่างผลลัพธ์ (พร้อม context):

{
  "level": 30,
  "msg": "Plugin initialized",
  "plugin": "plugin-audit-trail"
}

#Logger แบบกำหนดเอง

คุณสามารถสร้าง logger instance แบบกำหนดเองในปลั๊กอินได้ โดยจะสืบทอดหรือขยายการตั้งค่าเริ่มต้นครับ:

const logger = ctx.logger.child({ module: 'MyPlugin' });
logger.info('Submodule started');

Sub-logger จะสืบทอดการตั้งค่าของ logger หลัก และแนบ context โดยอัตโนมัติครับ

#ลำดับชั้นของระดับ Log

ระดับ Log ของ Pino จะถูกกำหนดด้วยค่าตัวเลขจากสูงไปต่ำ โดยที่ตัวเลขยิ่งน้อย ลำดับความสำคัญก็จะยิ่งต่ำลงครับ
ด้านล่างนี้คือตารางลำดับชั้นของระดับ Log ฉบับสมบูรณ์ครับ:

ชื่อระดับค่าตัวเลขชื่อเมธอดคำอธิบาย
fatal60logger.fatal()ข้อผิดพลาดร้ายแรง ซึ่งมักจะทำให้โปรแกรมไม่สามารถทำงานต่อไปได้
error50logger.error()ข้อผิดพลาดทั่วไป ที่บ่งชี้ว่าคำขอล้มเหลวหรือการดำเนินการผิดปกติ
warn40logger.warn()ข้อมูลเตือน ที่แจ้งเตือนถึงความเสี่ยงที่อาจเกิดขึ้น หรือสถานการณ์ที่ไม่คาดคิด
info30logger.info()ข้อมูลทั่วไป ที่บันทึกสถานะของระบบหรือการทำงานปกติ
debug20logger.debug()ข้อมูลสำหรับดีบัก ใช้สำหรับการวิเคราะห์ปัญหาในขั้นตอนการพัฒนา
trace10logger.trace()ข้อมูลการติดตามอย่างละเอียด ใช้สำหรับการวินิจฉัยเชิงลึก
silent-Infinity(ไม่มีเมธอดที่เกี่ยวข้อง)ปิดการแสดงผล Log ทั้งหมด

Pino จะแสดงผลเฉพาะ Log ที่มีระดับสูงกว่าหรือเท่ากับค่า level ที่ตั้งค่าไว้ในปัจจุบันเท่านั้นครับ ตัวอย่างเช่น เมื่อระดับ Log ถูกตั้งค่าเป็น info Log ระดับ debug และ trace จะถูกละเว้นครับ

#แนวทางปฏิบัติที่ดีที่สุดในการพัฒนาปลั๊กอิน

  1. ใช้ Logger ที่มี Context
    ใช้ ctx.logger ใน context ของปลั๊กอิน, โมเดล หรือแอปพลิเคชัน เพื่อให้ Log มีข้อมูลแหล่งที่มาโดยอัตโนมัติครับ

  2. แยกแยะระดับของ Log

    • ใช้ error สำหรับบันทึกข้อผิดพลาดทางธุรกิจ
    • ใช้ info สำหรับบันทึกการเปลี่ยนแปลงสถานะ
    • ใช้ debug สำหรับบันทึกข้อมูลการดีบักในระหว่างการพัฒนาครับ
  3. หลีกเลี่ยงการบันทึก Log มากเกินไป
    โดยเฉพาะอย่างยิ่งในระดับ debug และ trace แนะนำให้เปิดใช้งานเฉพาะในสภาพแวดล้อมการพัฒนาเท่านั้นครับ

  4. ใช้ข้อมูลแบบมีโครงสร้าง
    ส่งผ่านพารามิเตอร์ที่เป็นออบเจกต์แทนการต่อสตริง ซึ่งจะช่วยในการวิเคราะห์และกรอง Log ได้ง่ายขึ้นครับ

ด้วยแนวทางปฏิบัติข้างต้น นักพัฒนาจะสามารถติดตามการทำงานของปลั๊กอิน, แก้ไขปัญหา, และรักษาระบบ Log ให้มีโครงสร้างและสามารถขยายได้ดียิ่งขึ้นครับ