2012-11-27 27 views
6

Tôi đang làm việc để tăng cường ghi nhật ký trong một số ứng dụng node.js. Trước đây đã sử dụng các macro __ file__ và __ line __ preprocessor của C++ để giúp chúng tôi theo dõi các sự cố khi ghi nhật ký sự kiện. Tôi đã không tìm thấy bất cứ điều gì tương tự như nó trong thế giới node.js.Liệu node.js có bất kỳ thứ gì như __file__ và __line__ như macro tiền xử lý C++ không?

Có ai có đề xuất hoặc biết cách tôi có thể lấy số dòng và tên tệp trong node.js cho mục đích ghi nhật ký không?

Tôi đang tìm một cái gì đó như:

console.log(__FILE__ + "." + __LINE__ + "\t" + new Date().toISOString() + " Message "); 

Trả lời

7

Xem: Accessing line number in V8 JavaScript (Chrome & Node.js)

Sau đó cho một filename:

Object.defineProperty(global, '__file', { 
    get: function(){ 
    return __stack[1].getFileName().split('/').slice(-1)[0]; 
    } 
}); 

Bạn cũng có thể chỉ cần sử dụng process.argv[1] thay vì gọi __stack getter nhưng tôi muốn giữ nó tương tự.

2

Chỉ cần sử dụng preprocesor C, bổ sung thêm một build bước để mã của bạn nhưng sau đó nó cho phép tước ra đăng nhập của bạn cho Mã sản xuất.

+1

Không phải là một ý tưởng tồi. Không bao giờ nghĩ về điều đó. –

4

mở rộng trên các câu trả lời trước một chút vào đây: https://gist.github.com/gavinengel/8572856

Cho phép thiết lập globals: __line, __file, __ext, __dir

Bằng cách này, làm thế nào tôi có thể tạo ?: __function, __method, __class

+0

Cảm ơn vì ý chính. Bạn nên xem xét việc làm điều này thành một mô-đun nút, nó có thể là một mô-đun npm tốt đẹp – jeremy

+0

Chắc chắn. Trên thực tế, tôi khuyên bạn nên kiểm tra mã này mà tôi vừa mới nhận ra là ở đó bởi nhóm PHPJS: https://github.com/kvz/phpjs/tree/master/experimental/language – Gavin

+4

Tôi đã tiếp tục và thực hiện một npm : https: //www.npmjs.com/package/magic-globals – Gavin

Các vấn đề liên quan