173 lines
4.7 KiB
JavaScript
173 lines
4.7 KiB
JavaScript
!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.plog=e():"undefined"!=typeof global?global.plog=e():"undefined"!=typeof self&&(self.plog=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
|
var InMemoryStorage = function() {
|
|
this.events = [];
|
|
};
|
|
|
|
InMemoryStorage.prototype.append = function(event) {
|
|
this.events.push(event);
|
|
};
|
|
|
|
InMemoryStorage.prototype.clear = function() {
|
|
this.events = [];
|
|
};
|
|
|
|
InMemoryStorage.prototype.getEvents = function() {
|
|
return this.events;
|
|
};
|
|
|
|
module.exports = InMemoryStorage;
|
|
},{}],2:[function(require,module,exports){
|
|
var INDEX_KEY = 'plog-index';
|
|
|
|
function initialize() {
|
|
saveIndex({firstId: 0, nextId: 0});
|
|
}
|
|
|
|
function saveIndex(index) {
|
|
localStorage[INDEX_KEY] = JSON.stringify(index);
|
|
}
|
|
|
|
function loadIndex() {
|
|
return JSON.parse(localStorage[INDEX_KEY]);
|
|
}
|
|
|
|
function foreachKey(callback) {
|
|
var index = loadIndex();
|
|
for (var id = index.firstId; id < index.nextId; id++) {
|
|
callback('plog-event-' + id);
|
|
}
|
|
}
|
|
|
|
var LocalStorage = function(opts) {
|
|
opts = opts || {};
|
|
this.maxSize = opts.maxSize || 100;
|
|
|
|
if (typeof localStorage[INDEX_KEY] === 'undefined') {
|
|
initialize();
|
|
}
|
|
};
|
|
|
|
LocalStorage.prototype.clear = function() {
|
|
foreachKey(function(key) {
|
|
delete localStorage[key];
|
|
});
|
|
initialize();
|
|
};
|
|
|
|
LocalStorage.prototype.purgeOldEvents = function() {
|
|
var eventsToPurge = Math.round(this.maxSize * 0.2);
|
|
var index = loadIndex();
|
|
|
|
for (var i = 0; i < eventsToPurge; i++) {
|
|
var key = 'plog-event-' + (index.firstId + i);
|
|
delete localStorage[key];
|
|
}
|
|
|
|
index.firstId += eventsToPurge;
|
|
saveIndex(index);
|
|
};
|
|
|
|
LocalStorage.prototype.getEvents = function() {
|
|
var events = [];
|
|
foreachKey(function(key) {
|
|
var event = localStorage[key];
|
|
events.push(JSON.parse(event));
|
|
});
|
|
return events;
|
|
};
|
|
|
|
LocalStorage.prototype.append = function(event) {
|
|
|
|
var index = loadIndex();
|
|
var currentSize = index.nextId - index.firstId;
|
|
|
|
if (currentSize + 1 > this.maxSize) {
|
|
this.purgeOldEvents();
|
|
index = loadIndex();
|
|
}
|
|
|
|
var key = 'plog-event-' + index.nextId;
|
|
localStorage[key] = JSON.stringify(event);
|
|
|
|
index.nextId++;
|
|
saveIndex(index);
|
|
};
|
|
|
|
module.exports = LocalStorage;
|
|
},{}],3:[function(require,module,exports){
|
|
var plog = {};
|
|
|
|
plog.storages = {
|
|
LocalStorage: require('./LocalStorage'),
|
|
InMemoryStorage: require('./InMemoryStorage')
|
|
};
|
|
|
|
plog.level = {
|
|
DEBUG: 0,
|
|
INFO: 1,
|
|
WARN: 2,
|
|
ERROR: 3,
|
|
FATAL: 4,
|
|
getName: function(level) {
|
|
for (var x in this) {
|
|
if (this[x] === level) return x;
|
|
}
|
|
return level;
|
|
}
|
|
};
|
|
|
|
var currentStorage, currentLevel;
|
|
|
|
plog.reset = function() {
|
|
currentStorage = new plog.storages.LocalStorage();
|
|
currentLevel = plog.level.INFO;
|
|
};
|
|
|
|
plog.reset();
|
|
|
|
plog.useStorage = function(storage) {
|
|
currentStorage = storage;
|
|
};
|
|
|
|
plog.getStorage = function() {
|
|
return currentStorage;
|
|
};
|
|
|
|
plog.getLevel = function() {
|
|
return currentLevel;
|
|
};
|
|
|
|
plog.setLevel = function(level) {
|
|
currentLevel = level;
|
|
};
|
|
|
|
function write(level, msg) {
|
|
if (level < currentLevel) return;
|
|
|
|
var event = {
|
|
level: level,
|
|
date: new Date(),
|
|
message: msg
|
|
};
|
|
|
|
currentStorage.append(event);
|
|
|
|
console.log(event.date.toISOString() + ': ' + plog.level.getName(level) + ': ' + event.message);
|
|
}
|
|
|
|
function createWriteFunc(level) {
|
|
return function(msg) {
|
|
write(level, msg);
|
|
};
|
|
}
|
|
|
|
for (var levelName in plog.level) {
|
|
if (plog.level.hasOwnProperty(levelName)) {
|
|
plog[levelName.toLowerCase()] = createWriteFunc(plog.level[levelName]);
|
|
}
|
|
}
|
|
|
|
module.exports = plog;
|
|
},{"./InMemoryStorage":1,"./LocalStorage":2}]},{},[3])
|
|
(3)
|
|
}); |