UNPKG

te-one-xlog

Version:

the te-one's xlog

79 lines (75 loc) 3.92 kB
import { safeGet, serverIp, asyncify } from './utils'; import LOGPARAMS, { XLOG } from './interface'; import { getLogger } from 'te-one-log4js'; import * as qs from 'querystring'; import * as uuidv4 from 'uuid/v4'; import * as cookie from 'cookie'; import * as day from 'dayjs'; function queue(log_arguments: XLOG): void { setImmediate(() => { getLogger('xlog').info(log_arguments); }); } if (!Object.getOwnPropertyNames(Promise.prototype).includes('finally')) { Promise.prototype['finally'] = function (callback) { let P = this.constructor; return this.then(value => P.resolve(callback()).then(() => value), reason => P.resolve(callback()).then(() => { throw reason })); }; } export default function AutoXLog(pt: string): Function { return function autoXlog(target) { const prototypes: object = target.prototype; const names: string[] = Object.getOwnPropertyNames(prototypes); names .filter(n => n !== 'constructor') .forEach(function (f) { const fun: Function = asyncify(target.prototype[f]); target.prototype[f] = async function (...params) { const ctx: object = params.slice(-1)[0]; const xlogInstance = new LOGPARAMS(); let log_arguments = xlogInstance.log; ctx['xlog'] = xlogInstance; log_arguments.pt = pt; log_arguments.int_xapi_count = ctx["int_xapi_count"] = (+safeGet(ctx, "header.xapicount", 0)) * 10000; const cookies: Object = cookie.parse(safeGet(ctx, 'header.cookie', "")); log_arguments.url = 'https://' + safeGet(ctx, 'header.host', '') + safeGet(ctx, 'url', '').split("?")[0]; log_arguments.ip_clientIp = safeGet(ctx, serverIp, null); log_arguments.serverIp = serverIp || null; log_arguments.date_logTime = day().format("YYYY-MM-DDTHH:mm:ss.SSS+0800"); log_arguments.key_id = uuidv4(); log_arguments.wxVer = safeGet(ctx, 'header.weixinversion', ""); log_arguments.version = safeGet(ctx, 'header.appversion', ""); log_arguments.system = safeGet(ctx, 'header.model', ""); log_arguments.xcxPubAPPVersion = safeGet(ctx, 'header.pubappversion', ""); log_arguments.sdkVer = safeGet(ctx, 'header.sdkversion', ""); log_arguments.SDKVersion = safeGet(ctx, 'header.sdkversion', ""); log_arguments.userAgent = safeGet(ctx, 'header["user-agent"]', ""); log_arguments.params = safeGet(ctx, 'request.method') === "POST" ? JSON.stringify(safeGet(ctx, 'request.body')) : JSON.stringify(qs.parse(safeGet(ctx, 'req._parsedUrl.query'))); log_arguments.orderId = safeGet(params, 'orderid', ''); log_arguments.text_cookie = safeGet(ctx, 'header.cookie', ""); log_arguments.key_ck_AUTH_UNIONID = safeGet(cookies, 'AUTH_UNIONID', ""); log_arguments.key_ck_H5Channel = safeGet(cookies, 'H5Channel', ""); log_arguments.key_ck_H5CookieId = safeGet(cookies, 'H5CookieId', ""); log_arguments.key_ck_H5SessionId = safeGet(cookies, 'H5SessionId', ""); log_arguments.key_ck_SessionToken = safeGet(cookies, 'SessionToken', ""); log_arguments.key_ck_cityid = safeGet(cookies, 'cityid', ""); log_arguments.key_ck_openid = safeGet(cookies, 'openid', ""); let response: any = await fun .apply(this, params) .catch(err => { if (process.env.NODE_ENV === 'dev') throw err; }); log_arguments.text_response = JSON.stringify(response); if (safeGet(response, "error", '') || safeGet(response, "errorCode", '')) { //业务异常 log_arguments.errorCode = safeGet(response, "errorCode", ''); log_arguments.errorMessage = safeGet(response, "errorMessage", ''); } queue(log_arguments); return response; } }) } };