|
@@ -0,0 +1,114 @@
|
|
|
+var LogAdapter = require('./adapter');
|
|
|
+var LogWriter = require('./writer');
|
|
|
+
|
|
|
+
|
|
|
+var LoggerSystem = class LoggerSystem {
|
|
|
+
|
|
|
+ constructor() {
|
|
|
+ this.adapters = [];
|
|
|
+ this.writers = {};
|
|
|
+ // Prepare TAGS
|
|
|
+
|
|
|
+ // Global log count? per log
|
|
|
+
|
|
|
+ // Stuff to replace
|
|
|
+ this.logFmt = "[%c]:%t: %m %e";
|
|
|
+ }
|
|
|
+ writer(name,writer) {
|
|
|
+ this.writers[name]= writer;
|
|
|
+ }
|
|
|
+ adapter(adapter) {
|
|
|
+ if(!adapter instanceof LogAdapter) {
|
|
|
+ throw Error("Should be an adapter");
|
|
|
+ }
|
|
|
+ this.adapters.push(adapter);
|
|
|
+ return adapter;
|
|
|
+ }
|
|
|
+ clear() {
|
|
|
+ this.adapters = [];
|
|
|
+ }
|
|
|
+
|
|
|
+ base(logger,TAG,msg) {
|
|
|
+ var self = this;
|
|
|
+ this.adapters.forEach((e) => {
|
|
|
+ if(e.filterFunc(TAG)) {
|
|
|
+ var fmt = e.logFmt || this.logFmt;
|
|
|
+ e.writers.forEach(function(w) {
|
|
|
+ var outmsg = self.format(TAG,w.count,logger.name,w.lastTime,logger.lastTime,fmt,msg);
|
|
|
+
|
|
|
+ // Strip ansi if any
|
|
|
+ w.doLog(outmsg);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ format(TAG,count,name,lastDate, lastLoggerDate, fmt, msg) {
|
|
|
+ var now = new Date();
|
|
|
+ var dateStr = (("0" + now.getDate()).slice(-2)
|
|
|
+ + "-" + ("0" +now.getMonth()).slice(-2)
|
|
|
+ + "-" + now.getFullYear()
|
|
|
+ + " " + ("0" + now.getHours()).slice(-2)
|
|
|
+ + ":" + ("0" + now.getMinutes()).slice(-2)
|
|
|
+ + ":" + ("0"+now.getSeconds()).slice(-2)) ;
|
|
|
+ var dateDiff = (now - lastDate);
|
|
|
+ var dateDiffStr = dateDiff + "ms";
|
|
|
+ if(dateDiff>1000) dateDiffStr = (dateDiff / 1000).toFixed(2) + "s";
|
|
|
+
|
|
|
+ var ldateDiffhr = process.hrtime(lastLoggerDate);
|
|
|
+ var ldateDiff = ( ldateDiffhr[0] * 1000000 + ldateDiffhr[1] / 1000 ) / 1000;
|
|
|
+ var ldateDiffStr = "";
|
|
|
+ if(ldateDiff > 1000)
|
|
|
+ ldateDiffStr = (ldateDiff / 1000).toFixed(2) + "s";
|
|
|
+ else {
|
|
|
+ ldateDiffStr = ldateDiff.toFixed(2) +"ms";
|
|
|
+ }
|
|
|
+
|
|
|
+ var s = fmt;
|
|
|
+ s = s.replace(/%c/g,count);
|
|
|
+ s = s.replace(/%m/g,msg);
|
|
|
+ s = s.replace(/%l/g,require('./logger').logTags[TAG]);
|
|
|
+ s = s.replace(/%n/g,name);
|
|
|
+ s = s.replace(/%e/g,"+" +dateDiffStr);
|
|
|
+ s = s.replace(/%E/g,"+" +ldateDiffStr);
|
|
|
+ s = s.replace(/%t/g,dateStr);
|
|
|
+ s = s.replace(/%%/g,"%");
|
|
|
+ s = s.replace(/%a/g,"\x1b");
|
|
|
+
|
|
|
+
|
|
|
+ var logSplit = s.split("%|");
|
|
|
+ // Might be sloooww
|
|
|
+ if(logSplit.length == 2) {
|
|
|
+ var ansiRegex = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
|
|
|
+
|
|
|
+ var llen = logSplit[0].replace(ansiRegex,"").length;
|
|
|
+ var rlen = logSplit[1].replace(ansiRegex,"").length+1;
|
|
|
+
|
|
|
+ // Only works if it has columns else just give some default
|
|
|
+ var col = process.stdout.columns || 80;
|
|
|
+ var pad = col - llen -rlen;
|
|
|
+
|
|
|
+ s = logSplit[0];
|
|
|
+ for(var i = 0;i<pad;i++) { s+=" "; }
|
|
|
+ s+= " "+logSplit[1];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return s;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+module.exports = LoggerSystem;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|