whistle
Version:
HTTP, HTTP2, HTTPS, Websocket debugging proxy
67 lines (57 loc) • 1.3 kB
JavaScript
var util = require('util');
var MAX_LENGTH = 360;
var MIN_LENGTH = 280;
var COUNT = 100;
var logIndex = 0;
var logs = [];
var LEVELS = ['fatal', 'error', 'warn', 'info', 'debug'];
function getLogs(startTime, count) {
var len = logs.length;
if (!len || startTime == -1) {
return [];
}
count = Math.min(count || COUNT, len);
if (startTime === 0) {
return logs.slice(-1);
}
if (startTime != -2 && startTime) {
for (var i = 0; i < len; i++) {
var log = logs[i];
if (log.id === startTime) {
++i;
return logs.slice(i, i + count);
}
}
}
return logs.slice(0, count);
}
function log(text, level) {
var now = Date.now();
logs.push({
id: now + '-' + ++logIndex,
date: now,
level: level,
text: text
});
var len = logs.length;
if (len > MAX_LENGTH) {
logs = logs.slice(len - MIN_LENGTH, len);
if (logIndex > 100000) {
logIndex = 0;
}
}
}
exports.getLogs = getLogs;
LEVELS.forEach(function (level) {
exports[level] = function (msg) {
if (msg == null && arguments.length < 2) {
return;
}
log(util.format.apply(null, arguments), level);
};
});
exports.getLatestId = function () {
var last = logs[logs.length - 1];
return last && last.id;
};
exports.log = exports.info;