Giới Thiệu
Trong bài viết này, chúng ta sẽ cùng nhau khám phá tệp logger.ts trong mã nguồn của dự án mcp-mermaid. Logger là một phần quan trọng giúp các lập trình viên theo dõi và ghi lại thông tin trong ứng dụng của họ. Việc xây dựng một logger nhất quán giúp cải thiện khả năng bảo trì và phát hiện lỗi trong mã nguồn.
Mục Đích của logger.ts
Việc định nghĩa một logger thống nhất cho toàn bộ mã nguồn là một thực tiễn tốt. Nhiều dự án mã nguồn mở (OSS) đã sử dụng các gói npm như colors hoặc picocolors để áp dụng màu sắc cho các log, nhưng điều này thường chỉ áp dụng trong CLI (Giao diện Dòng lệnh).
Bạn sẽ thấy đoạn chú thích dưới đây trong tệp mcp-mermaid/src/utils/logger.ts:
typescript
/**
* Logger thống nhất để ghi log nhất quán trong toàn ứng dụng
*/
const prefix = "[MCP-Mermaid]";
Các Phương Thức Được Định Nghĩa
Các phương thức như info, warn, error và success được định nghĩa như sau:
typescript
/**
* Ghi log thông tin
*/
export function info(message: string, ...args: unknown[]): void {
console.log(`${prefix} ℹ️ ${message}`, ...args);
}
/**
* Ghi log cảnh báo
*/
export function warn(message: string, ...args: unknown[]): void {
console.warn(`${prefix} ⚠️ ${message}`, ...args);
}
/**
* Ghi log lỗi
*/
export function error(message: string, error?: unknown): void {
console.error(`${prefix} ❌ ${message}`, error || "");
}
/**
* Ghi log thành công
*/
export function success(message: string, ...args: unknown[]): void {
console.log(`${prefix} ✅ ${message}`, ...args);
}
Phương Thức serverStartup
Để ghi lại thông tin khởi động của server, chúng ta có phương thức sau:
typescript
/**
* Ghi log thông tin khởi động server
*/
export function serverStartup(
serverType: string,
port: number,
endpoint: string,
): void {
const serverUrl = `http://localhost:${port}${endpoint}`;
const healthUrl = `http://localhost:${port}/health`;
const pingUrl = `http://localhost:${port}/ping`;
console.log(
`${prefix} 🚀 ${serverType} đang chạy tại: \x1b[32m\u001B[4m${serverUrl}\u001B[0m\x1b[0m`,
);
console.log("\nCác điểm kiểm tra:");
console.log(`• Kiểm tra sức khỏe: \u001B[4m${healthUrl}\u001B[0m`);
console.log(`• Kiểm tra kết nối: \u001B[4m${pingUrl}\u001B[0m`);
}
Phương Thức cleanup
Phương thức này được sử dụng để ghi lại thông tin dọn dẹp:
typescript
/**
* Ghi log thông tin dọn dẹp
*/
export function cleanup(message: string): void {
console.log(`${prefix} 🧹 ${message}`);
}
/**
* Đối tượng Logger để tương thích ngược
*/
export const Logger = {
info,
warn,
error,
success,
serverStartup,
cleanup,
};
Thực Hành Tốt Nhất
- Sử dụng tiền tố: Luôn sử dụng tiền tố cho các log để dễ dàng tìm kiếm và phân loại.
- Ghi log theo mức độ: Phân chia các loại log thành thông tin, cảnh báo, lỗi và thành công để dễ dàng xử lý.
- Đảm bảo tính nhất quán: Thống nhất cách ghi log trên toàn bộ ứng dụng để giúp cho việc bảo trì dễ dàng hơn.
Những Cạm Bẫy Thường Gặp
- Ghi log quá mức: Ghi quá nhiều thông tin không cần thiết có thể dẫn đến việc làm chậm ứng dụng và khó khăn trong việc tìm kiếm thông tin cần thiết.
- Thiếu thông tin: Đôi khi, việc không ghi lại đủ thông tin có thể làm khó khăn cho việc gỡ lỗi.
Mẹo Tối Ưu Hiệu Suất
- Ghi log bất đồng bộ: Sử dụng các phương thức ghi log bất đồng bộ để không làm chậm quá trình thực thi của ứng dụng.
- Lưu trữ log: Xem xét việc lưu trữ log vào file hoặc dịch vụ bên ngoài thay vì chỉ ghi trên console.
Khắc Phục Sự Cố
Nếu bạn gặp vấn đề với logger, hãy kiểm tra:
- Cấu trúc của các thông điệp log có rõ ràng và dễ hiểu không?
- Các mức độ log có được sử dụng hợp lý không?
Kết Luận
Logger là một phần quan trọng trong bất kỳ ứng dụng nào. Việc hiểu rõ cách thức hoạt động và cách sử dụng logger một cách hiệu quả sẽ giúp bạn phát triển ứng dụng tốt hơn và dễ dàng hơn trong việc gỡ lỗi. Hãy thử áp dụng những kiến thức trên vào dự án của bạn ngay hôm nay!
Câu Hỏi Thường Gặp (FAQ)
1. Tại sao lại cần một logger thống nhất?
Logger thống nhất giúp đảm bảo rằng tất cả các thông tin ghi lại đều có cấu trúc và dễ hiểu, giúp cho việc theo dõi và gỡ lỗi dễ dàng hơn.
2. Làm thế nào để cải thiện hiệu suất của logger?
Sử dụng ghi log bất đồng bộ và lưu trữ log vào file hoặc dịch vụ ngoài thay vì chỉ ghi trên console.