log.js 6.69 KB
const os = require("os");
var cfg = require('./config');
var utils = require('./utils');
var conf = cfg.get("configlog");
conf.projectName = cfg.get("appName");
var logg = require('commonlog-kb');
var constants = require('./constants');

var log4js = require('log4js');
var appenders = {};
appenders[conf.projectName] = { type: 'file', filename: conf.detail.path+"/"+os.hostname() + '_'+conf.projectName+'.detail' };
log4js.configure({
    appenders: appenders ,
    categories: { default: { appenders: [conf.projectName], level: 'info' } }
  });

var logger4jDetail = log4js.getLogger(conf.projectName);
var logger = [];

const mapLog = {};

logger.startlog = function (req,cmdData,session,identity)
{
     
   
    var start = {
        session : utils.undefinedToNull(session),
        cmd : cmdData,
        identity : utils.undefinedToNull(identity)   
    };
    
    mapLog[req.id].start = start;
}

logger.stat = function (msg){
    logg.stat(msg);
}

logger.log = function (msg,type)
{
    
    if(!type)
        type = 'debug';

    type = type.toLowerCase();

    switch(type) {
        case 'debug':
            logg.debug(msg);
            break;
        case 'info':
            logg.info(msg);
            break;
        case 'warn':
            logg.warn(msg);
            break;
        case 'error':
            logg.error(msg);
            break;
        default:
            logg.debug(msg);
    }

    console.log(msg);
}

logger.addSuccessSummary = function (req,nodeData,cmdData,result)
{
    summary = {
        node : utils.undefinedToNull(nodeData),
        cmd : cmdData,
        resultCode : result.resultCode,
        resultDescription : result.resultDescription,
        type : constants.SUCCESS      
    };
    mapLog[req.id].summaryList.push(summary);
}

logger.addErrorSummary = function (req,nodeData,cmdData,result)
{
    summary = {
        node : utils.undefinedToNull(nodeData),
        cmd : cmdData,
        resultCode : result.resultCode,
        resultDescription : result.resultDescription,
        type : constants.ERROR       
    };

    mapLog[req.id].summaryList.push(summary);
}

logger.logSummary = function (req,response)
{
    
    var start = mapLog[req.id].start;
    var summaryList = mapLog[req.id].summaryList;

    var log = logg.summary(start.session,start.cmd,start.identity);
    var row;
    for (let index = 0; index < summaryList.length; index++) {
        row = summaryList[index];
        if(row.type === constants.SUCCESS){
            log.addSuccessBlock(row.node,row.cmd,row.resultCode,row.resultDescription);
        } else {
            log.addErrorBlock(row.node,row.cmd,utils.undefinedToNull(row.resultCode),utils.undefinedToNull(row.resultDescription));
        }
    }

    if(response){
        log.end(response.resultCode,response.resultDescription)
    } else {
        log.end()
    }
}

logger.startEC = function(req)
{
    var objectLog = {
        summaryList : [],
        start : {},
        detail : {},
        startTime : new Date()
    }

    
    mapLog[req.id] = objectLog;

    var newLine = "\r\n";
    var messageRes = '';
    var startTime = mapLog[req.id].startTime;

    
    if(req.body)
    {
        if(typeof req.body === 'string')
            body = req.bod;
        else
            body = JSON.stringify(req.body);
    }

    var header = "";
    if(req.headers)
    {
        if(typeof req.headers === 'string')
            header = req.headers;
        else
            header = JSON.stringify(req.headers);
    }

    messageRes += newLine+newLine+"#====> Incoming Message <====# ";
    messageRes += newLine+"Session : "+req.id;
    messageRes += newLine+"Url : "+req.url;
    messageRes += newLine+"Method : "+req.method;
    messageRes += newLine+"Header : "+header;
    messageRes += newLine+"Body : "+body;
    messageRes += newLine+"Time in : "+startTime.toISOString();
    messageRes += newLine

    // logg.debug(messageRes);
}

logger.endEC = function(req,res)
{
   
    var newLine = "\r\n";
    var messageRes = '';
    var startTime = mapLog[req.id].startTime;
    var endTime = new Date();
    
    var body = "";
    if(res.resBody)
    {
        if(typeof res.resBody === 'string')
            body = res.resBody;
        else
            body = JSON.stringify(res.resBody);
    }

    var header = "";
    if(res.req.headers)
    {
        if(typeof res.req.headers === 'string')
            header = res.req.headers;
        else
            header = JSON.stringify(res.req.headers);
    }

    messageRes += newLine+newLine+"#====> Outgoing Message <====# ";
    messageRes += newLine+"Session : "+req.id;
    messageRes += newLine+"Header : "+header;
    messageRes += newLine+"Body : "+body;
    messageRes += newLine+"Time out : "+endTime.toISOString();
    messageRes += newLine+"Use times : "+Math.abs(endTime - startTime)+" ms";

    

    
    // logg.debug(messageRes);
    messageRes += newLine
}

//detail 
logger.detailRequestFE = function(req)
{
    // console.log(req);
    var protocal = "HTTP";
    var method = req.method;
    var url = req.headers.host+req.originalUrl;
    var body = JSON.stringify(req.body);
    logger4jDetail.info(logPrefix(req)+protocal+" "+method+" "+url+" Request from FE - body: "+body);
    
}

logger.detailResponseFE = function(req)
{
    var protocal = "HTTP";
    var method = req.method;
    var url = req.headers.host+req.originalUrl;
    var body = JSON.stringify(req.body);
    logger4jDetail.info(logPrefix(req)+protocal+" "+method+" "+url+" Response to FE - body: "+body);
}

logger.detailSqlQuery = function(req,collection,data)
{
    logger4jDetail.info(logPrefix(req)+"BE Send Mongo Collection: \""+collection+"\" Query: "+JSON.stringify(data));
}

logger.detailSqlResult = function(req,collection,data)
{
    logger4jDetail.info(logPrefix(req)+"BE Receive Mongo Collection: \""+collection+"\" Result: "+JSON.stringify(data));
}

logger.detailRequestBE = function(req,data)
{
    var protocal = data.protocal;
    var method = data.method;
    var url = data.url;
    var header = JSON.stringify(data.header);
    var body = JSON.stringify(data.body);
    logger4jDetail.info(logPrefix(req)+"BE Send "+protocal+" "+method+" "+url+" request-header: "+header+" request-body:"+body);
}

logger.detailResponseBE = function(req,data)
{
    var protocal = data.protocal;
    var method = data.method;
    var url = data.url;
    var header = JSON.stringify(data.header);
    var body = JSON.stringify(data.body);
    logger4jDetail.info(logPrefix(req)+"BE Receive "+protocal+" "+method+" "+url+" response-header: "+header+" response-body:"+body);
}

function logPrefix(req)
{
    
    var userName = "userName";
    var sessionID = "sessionID";
    var session = "session";

    return ":: ## "+userName+" - "+sessionID+" - "+session+ " ## ";

}

module.exports = logger;