@inventorjs/api-service
Version:
Api service manager base on axios
51 lines (50 loc) • 1.82 kB
JavaScript
import { getFinalURL } from './util.js';
export function writeLog({ config, response, responseTime, reqId, error, }) {
const extConfig = config.$ext;
const loggerConfig = extConfig?.logger;
if (!loggerConfig) {
return;
}
const logger = loggerConfig.logger;
let level = 'log';
const finalURL = getFinalURL(config);
const finalURLObj = new URL(finalURL);
const eventKey = loggerConfig?.customAttributeKeys?.event ?? 'event';
const reqKey = loggerConfig?.customAttributeKeys?.req ?? 'req';
const resKey = loggerConfig?.customAttributeKeys?.res ?? 'res';
const responseTimeKey = loggerConfig?.customAttributeKeys?.responseTime ?? 'responseTime';
const eventSuccess = loggerConfig?.customEventName?.success ?? 'api-success';
const eventError = loggerConfig?.customEventName?.error ?? 'api-error';
const logData = {
[eventKey]: eventSuccess,
[reqKey]: {
id: reqId,
url: finalURL,
method: config.method,
query: config.params,
params: extConfig?.params,
headers: config.headers.toJSON(),
pathname: finalURLObj.pathname,
body: config.data,
},
[resKey]: {
statusCode: response?.status ?? 0,
statusText: response?.statusText ?? '',
headers: response?.headers?.toJSON?.() ?? response?.headers,
body: response?.data,
},
[responseTimeKey]: responseTime,
};
if (error) {
level = 'error';
Object.assign(logData, {
event: eventError,
err: {
code: error.code ?? 0,
message: error.message ?? '',
stack: error.stack ?? '',
},
});
}
logger[level](logData);
}