123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- var LogAdapter = require('./adapter');
- var LogWriter = require('./writer');
- var LoggerSystem = class LoggerSystem {
-
- constructor() {
- this.adapters = [];
- this.writers = {};
- this.loggerLevels = {};
- // 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 = [];
- }
- solveLevels(logger,levels) {
-
- // If emptu all ok
- for(var k in levels) {
- if(logger.name.match(new RegExp("^" + k + "$"))) {
- return levels[k];
- }
- }
- return null;
- }
- base(logger,TAG,msg) {
- var self = this;
- var sTAG = LoggerSystem.TAGS[TAG];
- var gLevels = this.solveLevels(logger,this.loggerLevels);
- for(var a of this.adapters) {
- var aLevels = this.solveLevels(logger,a.loggerLevels);
- if(aLevels && !aLevels.includes(sTAG)) {
- return;
- }
- if(gLevels && !gLevels.includes(sTAG)) {
- return;
- }
- // is performance good?
- // Check if this adapter has conf
- if(a.filterFunc(TAG)) {
- a.writers.forEach(function(w) {
- var fmt = a.fmt;
- if(fmt==undefined ) {
- if(w.fmt != undefined && w.fmt[sTAG] != undefined) {
- fmt = w.fmt[LoggerSystem.TAGS[TAG]];
- }
- }
- var outmsg = self.format(TAG,w.count,logger.name,w.lastTime,logger.lastTime,fmt,msg);
- // Strip ansi if any
- w.doLog(outmsg);
- });
- }
- };
- }
- // Improve and clean this
- format(TAG,count,name,lastDate, lastLoggerDate, fmt, msg) {
- if(fmt == undefined) fmt = this.logFmt; // Overall default format
- 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,LoggerSystem.TAGS[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;
- }
- }
- LoggerSystem.TAGS = ["ERROR","WARN","INFO","VERBOSE"];
- module.exports = LoggerSystem;
|