1.1.4 • Published 3 years ago

commonlog-gas v1.1.4

Weekly downloads
5
License
ISC
Repository
-
Last release
3 years ago

Example commonlog-kb

config

let conf = {};
conf.projectName = 'PROJECT_NAME';  //project name

//Stream log server
conf.logStream = {};
conf.logStream.host = 'xx.xx.xx.xx';
conf.logStream.port = 80;
conf.logStream.maxQueueSize = 10000; //maxQueueSize

//Enable appLog
conf.log = {};
conf.log.time = 15;  //Minute
conf.log.size = null;   //maxsize per file, K
conf.log.path = './appLogPath/';  //path file
conf.log.level = 'debug'; //debug,info,warn,error
conf.log.console = false; 
conf.log.file = true;
conf.log.stream = false; //Stream to tcp server //needs conf.logStream
conf.log.autoAddResBody = true; //default  true
conf.log.format = 'json'; //json, pipe //default json

//Enable summaryLog
conf.summary = {};
conf.summary.time = 15;
conf.summary.size = null;   //maxsize per file, K
conf.summary.path = './summaryPath/';
conf.summary.console = false;
conf.summary.file = true;
conf.summary.stream = false; //Stream to tcp server //needs conf.logStream
conf.summary.format = 'json'; //write summaryLog format "json" OR "pipe" //default json

//Enable detail
conf.detail = {};
conf.detail.time = 15;
conf.detail.size = null;   //maxsize per file, K
conf.detail.path = './detailPath/';
conf.detail.console = false;
conf.detail.file = true;
conf.detail.stream = false; //Stream to tcp server //needs conf.logStream
conf.detail.rawData = true; //true == show raw data

//Enable stat
conf.stat={};
conf.stat.time = 15;
conf.stat.size = null;   //maxsize per file, K
conf.stat.path = './statPath/';
conf.stat.mode = 0; //0 == :memory:, 1== file
conf.stat.pathDB = undefined; //optional, "Folder" path DB store
conf.stat.statInterval = 15;
conf.stat.console = false;
conf.stat.file = true;
conf.stat.stream = false; //Stream to tcp server //needs conf.logStream
conf.stat.flush = false; //true == enable flush stat
conf.stat.format = 'json'; //json, pipe //default json
//conf.stat.process  => String | Array
conf.stat.process = '/path/that/contain/data'
//OR
conf.stat.process = [{
  "name":"stat_name_a",
  "threshold": 3,
  "severity":"critical" //critical, major
},{
  "name":"stat_name_b",
  "threshold": 1
}]; 

//Enable alarm
conf.alarm = {};
conf.alarm.time = 15;
conf.alarm.size = null;
conf.alarm.path = './alarmPath/';
conf.alarm.console = false;
conf.alarm.file = true;
//conf.alarm.process  => String | Array
conf.alarm.process = '/path/that/contain/data'
//OR
conf.alarm.process = [{
  "id": 1,
  "name":"stat_name_a"
}]; 

init log with config (call once)

Please calli init() after lasted middleware

//simple
let logg = require('commonlog-kb').init(conf);

//integrate with express
let app = express();
let logg = require('commonlog-kb').init(conf, app);

logg.sessionID = (req,res) =>{
  return 'how to find session'
};

Check log already init

let alreadyInit = logg.ready();

Example appLog

logg.debug('without session');
logg.debug('session', 'text to log');
logg.debug('session', {foo:'bar'},['foo','bar']);

logg.info('without session');
logg.info('session', 'text to log');
logg.info('session', {foo:'bar'},['foo','bar']);

logg.warn('without session');
logg.warn('session', 'text to log');
logg.warn('session', {foo:'bar'},['foo','bar']);

logg.error('without session');
logg.error('session', 'text to log');
logg.error('session', {foo:'bar'},['foo','bar']);
  • example data (conf.log.format="pipe")
20190410 16:09:38.289|DESKTOP-E0NGPUA|PROJECT_NAME|0||debug|without session
20190410 16:09:38.290|DESKTOP-E0NGPUA|PROJECT_NAME|0|session|debug|text to log
20190410 16:09:38.290|DESKTOP-E0NGPUA|PROJECT_NAME|0|session|debug|{"foo":"bar"} ["foo","bar"]
20190410 16:09:38.291|DESKTOP-E0NGPUA|PROJECT_NAME|0||info|without session
20190410 16:09:38.291|DESKTOP-E0NGPUA|PROJECT_NAME|0|session|info|text to log
20190410 16:09:38.291|DESKTOP-E0NGPUA|PROJECT_NAME|0|session|info|{"foo":"bar"} ["foo","bar"]
20190410 16:09:38.291|DESKTOP-E0NGPUA|PROJECT_NAME|0||warn|without session
20190410 16:09:38.291|DESKTOP-E0NGPUA|PROJECT_NAME|0|session|warn|text to log
20190410 16:09:38.291|DESKTOP-E0NGPUA|PROJECT_NAME|0|session|warn|{"foo":"bar"} ["foo","bar"]
20190410 16:09:38.291|DESKTOP-E0NGPUA|PROJECT_NAME|0||error|without session
20190410 16:09:38.291|DESKTOP-E0NGPUA|PROJECT_NAME|0|session|error|text to log
20190410 16:09:38.291|DESKTOP-E0NGPUA|PROJECT_NAME|0|session|error|{"foo":"bar"} ["foo","bar"]
  • example data (conf.log.format="json")
{"LogType":"App","Host":"DESKTOP-E0NGPUA","AppName":"PROJECT_NAME","Instance":"0","Session":"","InputTimeStamp":"20190826 16:01:21.715","Level":"debug","Message":"without session"}
{"LogType":"App","Host":"DESKTOP-E0NGPUA","AppName":"PROJECT_NAME","Instance":"0","Session":"session","InputTimeStamp":"20190826 16:01:21.721","Level":"debug","Message":"text to log"}
{"LogType":"App","Host":"DESKTOP-E0NGPUA","AppName":"PROJECT_NAME","Instance":"0","Session":"session","InputTimeStamp":"20190826 16:01:21.722","Level":"debug","Message":[{"foo":"bar"},["foo","bar"]]}

{"LogType":"App","Host":"DESKTOP-E0NGPUA","AppName":"PROJECT_NAME","Instance":"0","Session":"","InputTimeStamp":"20190826 16:01:21.733","Level":"info","Message":"without session"} {"LogType":"App","Host":"DESKTOP-E0NGPUA","AppName":"PROJECT_NAME","Instance":"0","Session":"session","InputTimeStamp":"20190826 16:01:21.735","Level":"info","Message":"text to log"} {"LogType":"App","Host":"DESKTOP-E0NGPUA","AppName":"PROJECT_NAME","Instance":"0","Session":"session","InputTimeStamp":"20190826 16:01:21.736","Level":"info","Message":[{"foo":"bar"},"foo","bar"]}

{"LogType":"App","Host":"DESKTOP-E0NGPUA","AppName":"PROJECT_NAME","Instance":"0","Session":"","InputTimeStamp":"20190826 16:01:21.747","Level":"warn","Message":"without session"} {"LogType":"App","Host":"DESKTOP-E0NGPUA","AppName":"PROJECT_NAME","Instance":"0","Session":"session","InputTimeStamp":"20190826 16:01:21.749","Level":"warn","Message":"text to log"} {"LogType":"App","Host":"DESKTOP-E0NGPUA","AppName":"PROJECT_NAME","Instance":"0","Session":"session","InputTimeStamp":"20190826 16:01:21.750","Level":"warn","Message":[{"foo":"bar"},"foo","bar"]}

{"LogType":"App","Host":"DESKTOP-E0NGPUA","AppName":"PROJECT_NAME","Instance":"0","Session":"","InputTimeStamp":"20190826 16:01:21.751","Level":"error","Message":"without session"} {"LogType":"App","Host":"DESKTOP-E0NGPUA","AppName":"PROJECT_NAME","Instance":"0","Session":"session","InputTimeStamp":"20190826 16:01:21.752","Level":"error","Message":"text to log"} {"LogType":"App","Host":"DESKTOP-E0NGPUA","AppName":"PROJECT_NAME","Instance":"0","Session":"session","InputTimeStamp":"20190826 16:01:21.753","Level":"error","Message":[{"foo":"bar"},"foo","bar"]}

### Example stat
```js
logg.stat('recv command a');
logg.stat('recv command a');
  • example app log (conf.log.format="pipe")
TIMESTAMP|HOSTNAME|STATNAME|COUNTER
2019-04-10 11:10:04.000|DESKTOP-E0NGPUA|recv command a|2
END
  • example app log (conf.log.format="json")
{"LogType":"Stat","Host":"DESKTOP-E0NGPUA","AppName":"PROJECT_NAME","Instance":"0","TimeStamp":"2019-08-26 16:18:00.000","StatName":"recv command a","StatCount":2}

Example alarm

  • example alarm
2019-04-10 12:20:34.000|DESKTOP-E0NGPUA|major|id|stat_name_b[1:2]

Force flush stat

http://IP:PORT/flushStat

Example summary

//CREATE summaryLog
var s1 = logg.summary('session1', 'initInvoke', 'cmd', 'identity');
//CREATE summaryLog without initInvoke parameter
var s1 = logg.summary('session1', undefined, 'cmd', 'identity');

//OPTIONAL add field
s1.addField('Field_1','value');
s1.addField('Field_1',{'example':'value'});

//OPTIONAL add sequence 
s1.addSuccessBlock('node', 'a', '20000', 'resultDesc');
s1.addSuccessBlock('node', 'b', 'resultCode', 'resultDesc');
s1.addSuccessBlock('node1', 'c', 'resultCode', 'resultDesc');
s1.addSuccessBlock('node1', 'cmd', 'resultCode', 'resultDesc');
s1.addErrorBlock('node1', 'cmd', 'resultCode', 'resultDesc');
//WITE summaryLog (sync)
s1.end('responseResult','responseDesc');
//WITE summaryLog (async)
s1.endASync('responseResult', 'responseDesc','transactionResult ','transactionDesc');

example summary log (pipe format)

20190724 09:31:33.344|DESKTOP-E0NGPUA|PROJECT_NAME|0|20190724 09:31:33.343|session1|initInvoke|cmd|identity|20000|sucesss|[node; a(1); [20000; resultDesc(1)], node; b(1); [resultCode; resultDesc(1)], node1; c(1); [resultCode; resultDesc(1)], node1; cmd(2); [resultCode; resultDesc(2)]]|20190724 09:31:33.344|1 ms

example summary log (json format)

{
  "InputTimeStamp": "20190724 09:32:59.870",
  "Host": "DESKTOP-E0NGPUA",
  "AppName": "PROJECT_NAME",
  "Instance": "0",
  "Session": "session1",
  "InitInvoke": "initInvoke",
  "Scenario": "cmd",
  "Identity": "identity",
  "ResponseResult": "20000",
  "ResponseDesc": "sucesss",
  "Sequences": [
    {
      "Node": "node",
      "Command": "a",
      "result": [
        {
          "Result": "20000",
          "Desc": "resultDesc"
        }
      ]
    },
    {
      "Node": "node",
      "Command": "b",
      "result": [
        {
          "Result": "resultCode",
          "Desc": "resultDesc"
        }
      ]
    },
    {
      "Node": "node1",
      "Command": "c",
      "result": [
        {
          "Result": "resultCode",
          "Desc": "resultDesc"
        }
      ]
    },
    {
      "Node": "node1",
      "Command": "cmd",
      "result": [
        {
          "Result": "resultCode",
          "Desc": "resultDesc"
        }
      ]
    }
  ],
  "EndProcessTimeStamp": "20190724 09:32:59.871",
  "ProcessTime": "1 ms"
}

Example detail

//Type of detailLog
- Input
    req, res, res_timeout, res_error
- Output
    req, res, req_retry_$COUNT/$MAX_COUNT(EX. req_retry_1/2)

//CREATE detailLog
var ddd = logg.detail('session1', 'initInvoke','cmd', 'identity');
//CREATE detailLog without initInvoke parameter
var ddd = logg.detail('session1', undefined, 'cmd', 'identity');

//Input without protocol
ddd.addInputRequest( 'node', 'cmd', 'invoke', 'rawData', {} );
let resTimeInMilliSec = 1007;
ddd.addInputResponse( 'node', 'cmd', 'invoke', 'rawData', {}, resTimeInMilliSec );
ddd.addInputResponse( 'node', 'cmd', 'invoke', 'rawData', {} );
ddd.addInputResponseTimeout( 'node', 'cmd', 'invoke');
ddd.addInputResponseError( 'node', 'cmd', 'invoke');

//Output without protocol
ddd.addOutputRequest( 'node', 'cmd', 'invoke', 'rawData', {});
ddd.addOutputResponse( 'node', 'cmd', 'invoke', 'rawData', {});
let totalCount_ex1 = 1;
let maxRetry_ex1 = 2;
ddd.addOutputRequestRetry( 'node', 'cmd', 'invoke', 'rawData', {}, totalCount_ex1, maxRetry_ex1 );
ddd.end();

//Input/Output with protocol
let protocol="http";
let protocolMethod="get";
ddd.addInputRequest( 'node', 'cmd', 'invoke', 'rawData', {}, protocol, protocolMethod );
ddd.addOutputRequest( 'node', 'cmd', 'invoke', 'rawData', {}, protocol, protocolMethod);
ddd.end();
  • example detail log
{
  "Host": "DESKTOP-E0NGPUA",
  "AppName": "PROJECT_NAME",
  "Instance": "0",
  "Session": "session1",
  "InitInvoke": "initInvoke",
  "Scenario": "cmd",
  "Identity": "identity",
  "InputTimeStamp": "20190724 09:37:49.200",
  "Input": [
    {
      "Invoke": "invoke",
      "Event": "node.cmd",
      "Type": "req",
      "Data": {
  }
},
{
  "Invoke": "invoke",
  "Event": "node.cmd",
  "Protocol": "http.get",
  "Type": "req",
  "Data": {
    
  }
},
{
  "Invoke": "invoke",
  "Event": "node.cmd",
  "Type": "res",
  "Data": {
    
  },
  "ResTime": "1007 ms"
},
{
  "Invoke": "invoke",
  "Event": "node.cmd",
  "Type": "res",
  "Data": {
    
  }
},
{
  "Invoke": "invoke",
  "Event": "node.cmd",
  "Type": "res_timeout"
},
{
  "Invoke": "invoke",
  "Event": "node.cmd",
  "Type": "res_error"
}

], "OutputTimeStamp": "20190724 09:37:49.200", "Output": [ { "Invoke": "invoke", "Event": "node.cmd", "Type": "req", "Data": {

  }
},
{
  "Invoke": "invoke",
  "Event": "node.cmd",
  "Protocol": "http.get",
  "Type": "req",
  "Data": {
    
  }
},
{
  "Invoke": "invoke",
  "Event": "node.cmd",
  "Type": "res",
  "Data": {
    
  }
},
{
  "Invoke": "invoke",
  "Event": "node.cmd",
  "Type": "req_retry_1/2",
  "Data": {
    
  }
}

], "ProcessingTime": "1 ms" }

### Version History
**version 1.5.1**

Add function addField(key, value) to summary log.

**version 1.6.0**

Add function stream log to logStash. Fix calulate detaillog ProcessingTime. Add config conf.stat.format pipe or json (default json). Add config conf.log.format pipe or json (default json).

**version 1.6.1**

Add field "ProcessApp" in app log.

**version 1.6.2, 1.6.3**

Fix error init log without conf.stat.

**version 1.6.4**

Fix bug call add stat without conf

**version 1.6.5**

Change summaryLog.Sequences.result to summaryLog.Sequences.Result

**version 1.6.6**

Fixed appLog write Instances of Error objects with {}

**version 1.6.7**

Fixed detailLog case only have input

**version 1.6.8**

DetailLog add ResTime to input responseType res,res_timeout,res_error

**version 1.6.9**

DetailLog add function isRawDataEnabled()

**version 1.6.10, 1.6.11, 1.6.12**

SummaryLog add function isEnd() SummaryLog check end,endASync twice