記錄請求參數(shù)和請求內(nèi)容
默認(rèn)morgan沒有提供記錄請求參數(shù)和請求內(nèi)容的方法徐裸,
但是他提供了擴展方法遣鼓,如下:
morgan.token('requestParameters', function(req, res){
return JSON.stringify(req.query) || '-';
});
morgan.token('requestBody', function(req, res){
return JSON.stringify(req.body) || '-';
});
// create custom format,includes the custom token
morgan.format('live-api', ':method :url :status :requestParameters :requestBody');
app.use(morgan('live-api'));
輸出日志到數(shù)據(jù)庫或?qū)⑷罩咀鳛閰?shù)發(fā)送到其他請求
默認(rèn)日志信息是輸出到命令行窗口中重贺,能否輸出到文件或數(shù)據(jù)庫中呢骑祟?答案是肯定的
定義morgan的options中有個stream配置項回懦,我們可以利用他做文章。
const request = require('request')
const split = require('split')
// 將日志信息作為請求參數(shù)傳給其他地址次企,比如 Elasticsearch 日志分析系統(tǒng)
let httpLogStream = split().on('data', function (line) {
request({
url: 'localhost://192.168.1.1:8080',
method: 'POST',
body: line
})
.on('response', function(response) {
console.log(response.statusCode) // 200
})
});
app.use(morgan('common', {
stream: httpLogStream
}));
// 將日志寫入數(shù)據(jù)庫
// 帶write方法的對象
let dbStream = {
write: function(line){
saveToDatabase(line); // 偽代碼怯晕,保存到數(shù)據(jù)庫
}
};
// 將 dbStream 作為 stream 配置項的值
app.use(morgan('short', {stream: dbStream}));