123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- 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;
|