javascript - Có cách nào trong nodejs để in đầu ra log4js dưới định dạng JSON không?
Tôi đang cố gắng lấy đầu ra của log4js ở định dạng JSON để có thể dễ dàng theo dõi. Có cách nào mà chúng ta phải thiết lập trong configuration.json để đầu ra do log4js tạo ra sẽ ở định dạng JSON không?
Hiện tại tôi đang sử dụng cấu hình sau.
{
"appenders": [
{
"category": "XXXXX",
"type": "dateFile",
"filename": "XXXXXXXX",
"pattern": "-from-MM-dd",
"layout": {
"type": "messagePassThrough"
}
},
{
"category": "XXXXXXXXX",
"type": "dateFile",
"filename": "XXXXXXXX",
"pattern": "-from-MM-dd",
"layout": {
"type": "messagePassThrough"
}
}
],
"levels": {
"XXXXConfig": "INFO",
"XXXXXjectConfig" : "INFO"
}
}
và tôi nhận được đầu ra theo định dạng sau :
DEBUG: 1458562784032 : 2016-03-21T12:19:44.4444+00:00 : Data in request: : {
"action": "XXXXXXX",
"user": {
"username": "XXXX",
"id" : XXXX,
"pos" : XXXX
},
"version": 111
}
thay vào đó tôi muốn nó theo (Một cái gì đó giống như cấu trúc sau) :
{"id" : "1458562784032", "time" : "2016-03-21T12:19:44.4444+00:00", "message" : "Dữ liệu trong yêu cầu:", "data" : "{ "action": "XXXXXXX", "user": { "username": "XXXX", "id" : XXXX, "pos: : XXXX }, "version": 111 }" }
Có thể có điều gì đó mà tôi bỏ lỡ trong cấu hình.
Cảm ơn bạn đã giúp đỡ.
Câu trả lời #1
Hiện có hai cách để thực hiện vấn đề này, bạn có thể thêm bố cục hoặc định dạng mẫu của riêng bạn.
Dưới đây là mã mẫu để thêm bố cục của riêng bạn với định dạng JSON
const log4js = require('log4js');
log4js.addLayout('json', function(config) {
return function(logEvent) { return JSON.stringify(logEvent) + config.separator; }
});
log4js.configure({
appenders: {
out: { type: 'stdout', layout: { type: 'json', separator: ',' } }
},
categories: {
default: { appenders: ['out'], level: 'info' }
}
});
const logger = log4js.getLogger('json-test');
logger.info('this is just a test');
Câu trả lời #2
Tôi thích cách tiếp cận của @troy, mặc dù bạn có thể đang bỏ qua một số trường hợp dữ liệu ngoại lệ khi đưa dữ liệu vào sự kiện nhật ký của bạn.
Hai mô-đun bố cục đơn giản có sẵn trên npm có thể xử lý điều này là:
- https://www.npmjs.com/package/log4js-layout-json
- https://www.npmjs.com/package/log4js-json-layout
