@@ -9,26 +9,18 @@ const truncationMarker = '... (truncated)';
|
||||
|
||||
export const LogLevel = {
|
||||
INFO: 'info',
|
||||
ERROR: 'error'
|
||||
}
|
||||
ERROR: 'error',
|
||||
};
|
||||
|
||||
export const LogOrder = {
|
||||
DESCENDING: 'desc',
|
||||
ASCENDING: 'asc'
|
||||
}
|
||||
ASCENDING: 'asc',
|
||||
};
|
||||
|
||||
const logLevels = [
|
||||
'error',
|
||||
'warn',
|
||||
'info',
|
||||
'debug',
|
||||
'verbose',
|
||||
'silly',
|
||||
]
|
||||
const logLevels = ['error', 'warn', 'info', 'debug', 'verbose', 'silly'];
|
||||
|
||||
export class LoggerController extends AdaptableController {
|
||||
|
||||
constructor(adapter, appId, options = {logLevel: 'info'}) {
|
||||
constructor(adapter, appId, options = { logLevel: 'info' }) {
|
||||
super(adapter, appId, options);
|
||||
let level = 'info';
|
||||
if (options.verbose) {
|
||||
@@ -39,7 +31,8 @@ export class LoggerController extends AdaptableController {
|
||||
}
|
||||
const index = logLevels.indexOf(level); // info by default
|
||||
logLevels.forEach((level, levelIndex) => {
|
||||
if (levelIndex > index) { // silence the levels that are > maxIndex
|
||||
if (levelIndex > index) {
|
||||
// silence the levels that are > maxIndex
|
||||
this[level] = () => {};
|
||||
}
|
||||
});
|
||||
@@ -50,8 +43,8 @@ export class LoggerController extends AdaptableController {
|
||||
const query = urlObj.query;
|
||||
let sanitizedQuery = '?';
|
||||
|
||||
for(const key in query) {
|
||||
if(key !== 'password') {
|
||||
for (const key in query) {
|
||||
if (key !== 'password') {
|
||||
// normal value
|
||||
sanitizedQuery += key + '=' + query[key] + '&';
|
||||
} else {
|
||||
@@ -83,7 +76,8 @@ export class LoggerController extends AdaptableController {
|
||||
// for strings
|
||||
if (typeof e.url === 'string') {
|
||||
e.url = this.maskSensitiveUrl(e.url);
|
||||
} else if (Array.isArray(e.url)) { // for strings in array
|
||||
} else if (Array.isArray(e.url)) {
|
||||
// for strings in array
|
||||
e.url = e.url.map(item => {
|
||||
if (typeof item === 'string') {
|
||||
return this.maskSensitiveUrl(item);
|
||||
@@ -119,10 +113,15 @@ export class LoggerController extends AdaptableController {
|
||||
log(level, args) {
|
||||
// make the passed in arguments object an array with the spread operator
|
||||
args = this.maskSensitive([...args]);
|
||||
args = [].concat(level, args.map((arg) => {
|
||||
if (typeof arg === 'function') { return arg(); }
|
||||
return arg;
|
||||
}));
|
||||
args = [].concat(
|
||||
level,
|
||||
args.map(arg => {
|
||||
if (typeof arg === 'function') {
|
||||
return arg();
|
||||
}
|
||||
return arg;
|
||||
})
|
||||
);
|
||||
this.adapter.log.apply(this.adapter, args);
|
||||
}
|
||||
|
||||
@@ -150,33 +149,28 @@ export class LoggerController extends AdaptableController {
|
||||
return this.log('silly', arguments);
|
||||
}
|
||||
|
||||
logRequest({
|
||||
method,
|
||||
url,
|
||||
headers,
|
||||
body
|
||||
}) {
|
||||
this.verbose(() => {
|
||||
const stringifiedBody = JSON.stringify(body, null, 2);
|
||||
return `REQUEST for [${method}] ${url}: ${stringifiedBody}`;
|
||||
}, {
|
||||
method,
|
||||
url,
|
||||
headers,
|
||||
body
|
||||
});
|
||||
logRequest({ method, url, headers, body }) {
|
||||
this.verbose(
|
||||
() => {
|
||||
const stringifiedBody = JSON.stringify(body, null, 2);
|
||||
return `REQUEST for [${method}] ${url}: ${stringifiedBody}`;
|
||||
},
|
||||
{
|
||||
method,
|
||||
url,
|
||||
headers,
|
||||
body,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
logResponse({
|
||||
method,
|
||||
url,
|
||||
result
|
||||
}) {
|
||||
logResponse({ method, url, result }) {
|
||||
this.verbose(
|
||||
() => { const stringifiedResponse = JSON.stringify(result, null, 2);
|
||||
() => {
|
||||
const stringifiedResponse = JSON.stringify(result, null, 2);
|
||||
return `RESPONSE from [${method}] ${url}: ${stringifiedResponse}`;
|
||||
},
|
||||
{result: result}
|
||||
{ result: result }
|
||||
);
|
||||
}
|
||||
// check that date input is valid
|
||||
@@ -195,7 +189,8 @@ export class LoggerController extends AdaptableController {
|
||||
|
||||
truncateLogMessage(string) {
|
||||
if (string && string.length > LOG_STRING_TRUNCATE_LENGTH) {
|
||||
const truncated = string.substring(0, LOG_STRING_TRUNCATE_LENGTH) + truncationMarker;
|
||||
const truncated =
|
||||
string.substring(0, LOG_STRING_TRUNCATE_LENGTH) + truncationMarker;
|
||||
return truncated;
|
||||
}
|
||||
|
||||
@@ -203,7 +198,8 @@ export class LoggerController extends AdaptableController {
|
||||
}
|
||||
|
||||
static parseOptions(options = {}) {
|
||||
const from = LoggerController.validDateTime(options.from) ||
|
||||
const from =
|
||||
LoggerController.validDateTime(options.from) ||
|
||||
new Date(Date.now() - 7 * MILLISECONDS_IN_A_DAY);
|
||||
const until = LoggerController.validDateTime(options.until) || new Date();
|
||||
const size = Number(options.size) || 10;
|
||||
@@ -228,12 +224,16 @@ export class LoggerController extends AdaptableController {
|
||||
// size (optional) Number of rows returned by search. Defaults to 10
|
||||
getLogs(options = {}) {
|
||||
if (!this.adapter) {
|
||||
throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED,
|
||||
'Logger adapter is not available');
|
||||
throw new Parse.Error(
|
||||
Parse.Error.PUSH_MISCONFIGURED,
|
||||
'Logger adapter is not available'
|
||||
);
|
||||
}
|
||||
if (typeof this.adapter.query !== 'function') {
|
||||
throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED,
|
||||
'Querying logs is not supported with this adapter');
|
||||
throw new Parse.Error(
|
||||
Parse.Error.PUSH_MISCONFIGURED,
|
||||
'Querying logs is not supported with this adapter'
|
||||
);
|
||||
}
|
||||
options = LoggerController.parseOptions(options);
|
||||
return this.adapter.query(options);
|
||||
|
||||
Reference in New Issue
Block a user