Authored by 周奇琪

接口日志优化

@@ -23,6 +23,6 @@ app.engine('.hbs', hbs({ @@ -23,6 +23,6 @@ app.engine('.hbs', hbs({
23 })); 23 }));
24 24
25 // router 25 // router
26 -app.use(require('./router')); 26 +require('./router')(app);
27 27
28 module.exports = app; 28 module.exports = app;
@@ -6,19 +6,24 @@ @@ -6,19 +6,24 @@
6 6
7 'use strict'; 7 'use strict';
8 8
9 -const router = require('express').Router();  
10 -const cRoot = './controllers'; 9 +
11 let API = require('../../library/api'); 10 let API = require('../../library/api');
  11 +
12 // Your controller here 12 // Your controller here
13 -router.get('/', function(req, res) {  
14 - let api = new API();  
15 - let name = '/productColor/queryProductColors';  
16 - api.get(name, {}).then(function(body) {  
17 - res.send(body);  
18 - }).catch(function(error) {  
19 - res.send('some thing wrong'); 13 +let router = function(app) {
  14 + app.get('/', function(req, res) {
  15 + let api = new API();
  16 + let name = '/productColor/queryProductColors';
  17 +
  18 + api.get(name, {}).then(function(body) {
  19 + res.send(body);
  20 + }).catch(function() {
  21 + res.send('something wrong');
  22 + });
20 }); 23 });
21 -}); 24 +};
  25 +
  26 +
22 27
23 28
24 module.exports = router; 29 module.exports = router;
@@ -12,11 +12,43 @@ const log = require('./logger'); @@ -12,11 +12,43 @@ const log = require('./logger');
12 const api = require('../config/common').domains.api; 12 const api = require('../config/common').domains.api;
13 const Timer = require('./timer'); 13 const Timer = require('./timer');
14 14
  15 +/**
  16 + * 日志打印
  17 + * @param {Object} requestPromise 请求的promise对象
  18 + */
  19 +function logPrint(options, requestPromise) {
  20 +
  21 + // 接口统计
  22 + let timer = new Timer();
  23 +
  24 + timer.put('getApi');// 统计时间开始
  25 +
  26 + let method = options.method ? options.method : 'get';
  27 +
  28 + log.info('API Begin %s call: %s, parms: %j',
  29 + method, options.url, options.qs, {});
  30 + requestPromise.then((body) => {
  31 + let duration = timer.put('getApi');// 接口返回
15 32
16 -const ApiUrl = api; 33 + log.info('API %s res: %s, parms: %j , durationMs: %d ms , body: %s',
  34 + method, options.url, options.qs, duration, body);
  35 + }).catch((error) => {
  36 + let duration = timer.put('getApi');// 接口返回
  37 +
  38 + log.error('API %s res: %s, parms: %j , durationMs: %d ms error: %s , statusCode: %d',
  39 + method, options.url, options.qs, duration, error.message, error.statusCode);
  40 + });
  41 +}
  42 +
  43 +
  44 +let ApiUrl;
17 45
18 class API { 46 class API {
19 47
  48 + constructor(url) {
  49 + ApiUrl = url || api;
  50 + }
  51 +
20 /** 52 /**
21 * get 53 * get
22 * @param url String 54 * @param url String
@@ -29,20 +61,11 @@ class API { @@ -29,20 +61,11 @@ class API {
29 qs: data 61 qs: data
30 }; 62 };
31 63
32 - let timer = new Timer();  
33 - timer.put('getApi');// 统计时间开始 64 + let requestPromise = rp(options);
34 65
35 - let ret = rp(options); 66 + logPrint(options, requestPromise);// 日志打印
36 67
37 - ret.then((body)=>{  
38 - let duration = timer.put('getApi');// 接口返回  
39 - log.info('API GET: %s, parms: %j , durationMs: %d ms , body: %s', options.url, options.qs, duration, body);  
40 - }).catch((error)=>{  
41 - let duration = timer.put('getApi');// 接口返回  
42 - log.error('API GET: %s, parms: %j , durationMs: %d ms error: %s , statusCode: %d', options.url, options.qs, duration, error.message, error.statusCode);  
43 - });  
44 -  
45 - return ret; 68 + return requestPromise;
46 } 69 }
47 70
48 /** 71 /**
@@ -50,13 +73,19 @@ class API { @@ -50,13 +73,19 @@ class API {
50 * @params: urls => Array[Object[url[string], data[object]]] 73 * @params: urls => Array[Object[url[string], data[object]]]
51 */ 74 */
52 multiGet(urls) { 75 multiGet(urls) {
53 - var rps = []; 76 + let rps = [];
54 77
55 _.forEach(urls, function(el) { 78 _.forEach(urls, function(el) {
56 - rps.push(rp({ 79 + let options = {
57 url: `${ApiUrl}${el.url}`, 80 url: `${ApiUrl}${el.url}`,
58 qs: el.data 81 qs: el.data
59 - })); 82 + };
  83 +
  84 + let requestPromise = rp(options);
  85 +
  86 + logPrint(options, requestPromise);// 打印日志
  87 +
  88 + rps.push(requestPromise);
60 }); 89 });
61 90
62 return Promise.all(rps).then((d) => { 91 return Promise.all(rps).then((d) => {
@@ -70,11 +99,17 @@ class API { @@ -70,11 +99,17 @@ class API {
70 * @param data Obejct 99 * @param data Obejct
71 */ 100 */
72 post(url, data) { 101 post(url, data) {
73 - return rp({ 102 + let options = {
74 url: `${ApiUrl}${url}`, 103 url: `${ApiUrl}${url}`,
75 method: 'post', 104 method: 'post',
76 form: data 105 form: data
77 - }); 106 + };
  107 +
  108 + let requestPromise = rp(options);
  109 +
  110 + logPrint(options, requestPromise);// 打印日志
  111 +
  112 + return requestPromise;
78 } 113 }
79 } 114 }
80 115
@@ -24,6 +24,7 @@ class Timer { @@ -24,6 +24,7 @@ class Timer {
24 24
25 if (labelTime) { 25 if (labelTime) {
26 let duration = process.hrtime(labelTime); 26 let duration = process.hrtime(labelTime);
  27 +
27 return this._round(duration[1]); 28 return this._round(duration[1]);
28 } else { 29 } else {
29 this.timers[label] = process.hrtime(); 30 this.timers[label] = process.hrtime();