From 0b6272e09aba091c99777431b4ce6b0c65ca09b9 Mon Sep 17 00:00:00 2001 From: Sumate Kongpui Date: Wed, 17 Oct 2018 15:10:41 +0700 Subject: [PATCH] update template --- app.config.json | 41 ++++++++++++++++++++++++++++++++++++++--- app.js | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------- config/log4js_config.json | 18 ------------------ controllers/preference/index.js | 57 ++++++++++++++++++++++++++++++++++++++++----------------- logs/app.log | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------- logs/express-project | 0 node_modules/log4js/package.json | 12 ++++++------ node_modules/log4js/types/log4js.d.ts | 297 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- node_modules/log4js/types/test.ts | 131 ----------------------------------------------------------------------------------------------------------------------------------- node_modules/log4js/types/tsconfig.json | 9 --------- package-lock.json | 516 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 ++ utils/config.js | 12 ++++++------ utils/constants.js | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ utils/errors.js | 16 ---------------- utils/log.js | 264 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ utils/mongoDB.js | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------- utils/passport-func.js | 71 ----------------------------------------------------------------------- utils/request-logger.js | 67 ------------------------------------------------------------------- utils/send-response.js | 44 +++++++++++++++++++++----------------------- utils/stats.js | 41 +++++++++++++++++++++++++++++++++++++++++ utils/utils.js | 22 ++++++++++++++++++++-- utils/validator.js | 11 ----------- utils/winston-express-middleware/index.js | 305 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 24 files changed, 1266 insertions(+), 1079 deletions(-) delete mode 100644 config/log4js_config.json delete mode 100644 logs/express-project delete mode 100644 node_modules/log4js/types/log4js.d.ts delete mode 100644 node_modules/log4js/types/test.ts delete mode 100644 node_modules/log4js/types/tsconfig.json create mode 100644 utils/constants.js delete mode 100644 utils/errors.js create mode 100644 utils/log.js delete mode 100644 utils/passport-func.js delete mode 100644 utils/request-logger.js create mode 100644 utils/stats.js delete mode 100644 utils/validator.js delete mode 100644 utils/winston-express-middleware/index.js diff --git a/app.config.json b/app.config.json index 28c3862..2ef6e6e 100644 --- a/app.config.json +++ b/app.config.json @@ -1,13 +1,48 @@ { "default": { - "appName": "Hostpital service", + "appName": "Hostpital", "appPort": 3000, "apiUrlPrefix": "/api", "requestTimeout": 10, "mongoDB" : { "hopitalIp" : "10.1.2.155:27017", - "hopitalName" : "spw" - } + "hopitalName" : "hospital" + }, + "configlog" : { + "log" : { + "time" : 15, + "size" : null, + "path" : "./logs/log", + "level" : "debug", + "console" : false, + "file" : true + }, + "summary" : { + "time" : 15, + "size" : null, + "path" : "./logs/summary", + "console" : false, + "file" : true + }, + "detail" : { + "time" : 15, + "size" : null, + "path" : "./logs/detail", + "console" : false, + "file" : true + }, + "stat" : { + "time" : 15, + "size" : null, + "path" : "./logs/stat", + "mode" : 0, + "pathDB" : "undefined", + "statInterval" : 15, + "console" : false, + "file" : true + } + } + diff --git a/app.js b/app.js index 3f5123b..768fca8 100644 --- a/app.js +++ b/app.js @@ -3,6 +3,10 @@ const express = require('express'); const app = express(); const conf = require('utils/config'); const utils = require('utils/utils'); +var log = require('./utils/log'); + +var logg = require('commonlog-kb').init(conf.get("configlog"),app); + // console.log(conf.get('redis.host')); @@ -10,6 +14,8 @@ const utils = require('utils/utils'); const addRequestId = require('express-request-id')(); app.use(addRequestId); + + // setup express-session with redis store const session = require('express-session'); // const RedisStore = require('connect-redis')(session); @@ -31,6 +37,46 @@ const uuidV4 = require('uuid/v4'); // })); + +function logResponseBody(req, res, next) { + var oldWrite = res.write, + oldEnd = res.end; + + var chunks = []; + + res.write = function (chunk) { + chunks.push(chunk); + oldWrite.apply(res, arguments); + }; + + res.end = function (chunk) { + var body = ''; + + if (typeof chunk !== 'string' && !(chunk instanceof Buffer)) { + res["resBody"] = body ; + oldEnd.apply(res, arguments); + return ; + } + + if (!(chunk instanceof String || typeof chunk === 'string' ) ) + chunks.push(chunk); + try { + //console.dir(chunks); + body = chunks.length > 0? Buffer.concat(chunks).toString('utf8') :''; + } catch (error) { + logger.errorStack(error); + } + + res["resBody"] = body ; + + oldEnd.apply(res, arguments); + }; + + next(); + } + +app.use(logResponseBody); + // setup json body parser const bodyParser = require('body-parser'); app.use(bodyParser.json()); @@ -39,8 +85,8 @@ app.use(bodyParser.json()); // const logger = require('utils/request-logger'); // setup express request/response logger -const log4js = require('log4js'); -log4js.configure('./config/log4js_config.json'); +// const log4js = require('log4js'); +// log4js.configure('./config/log4js_config.json'); // const log4jsLogger = log4js.getLogger('express-project'); // const fileTransport = logger.fileTransport; @@ -88,11 +134,17 @@ app.use(function (req, res, next) { }); -app.use( function( req, res, next ) { +app.use(function( req, res, next ) { + if(req.headers["x-user"] && req.headers["usertoken"]) + next(); + else + res.status(401).json({resultCode:40100,resultDescription:'Access denied'}); + + }); +app.use( function( req, res, next ) { + // log.startEC(req); req = utils.findQueryString(req); - - next(); }); @@ -111,18 +163,40 @@ app.use(apiUrlPrefix+'/preference', preference); // let apiLogin = require('./controllers/login/login')(passport); // app.use('/', apiLogin); - +app.use( function( req, res, next ) { + if(req.res.resBody) + { + try{ + log.logSummary(req,JSON.parse(req.res.resBody)); + } catch(err) { + log.logSummary(req,req.res.resBody); + } + + }else + { + // var response = responseMsg.unknow(req); + + // log.startlog(req,req.method+"_"+"Unknow","Unknow","Unknow"); + // log.logDetail.addInput(req,"Unknow",req.method+"_"+"Unknow","Request",req,req.body); + // log.logDetail.addOutput(req,"Unknow",req.method+"_"+"Unknow","Response",response,response); + + // log.addErrorSummary(req,req.body.clientName,req.method+"_"+"Unknow","null","Unknown URL"); + // res.status(200).json(response); + // log.logSummary(req,response); + } + + // log.endEC(req,res); + next(); +} ); // handle not found -app.all('*', function(req, res) { - res.status(404); +// app.all('*', function(req, res) { - // respond with json - res.send({ - error: 'Not found' - }); +// var response = {resultCode: 40400,resultDescription: 'Data not found'}; +// log.endEC(req,response); +// res.status(404).send(response); -}); +// }); // // handle errors // app.use(function (err, req, res, next) { diff --git a/config/log4js_config.json b/config/log4js_config.json deleted file mode 100644 index b4ee94e..0000000 --- a/config/log4js_config.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "appenders": { - "express-project": { - "type": "dateFile", - "filename": "./logs/express-project", - "pattern": "-yyyyMMdd.log", - "alwaysIncludePattern": false - } - }, - "categories": { - "default": { - "appenders": [ - "express-project" - ], - "level": "all" - } - } -} \ No newline at end of file diff --git a/controllers/preference/index.js b/controllers/preference/index.js index 0a25770..487dfae 100644 --- a/controllers/preference/index.js +++ b/controllers/preference/index.js @@ -2,33 +2,56 @@ let express = require('express'); let router = express.Router(); let connection = require("../../utils/mongoDB") var utils = require('../../utils/utils'); +var stats = require('../../utils/stats'); +var log = require('../../utils/log'); -router.get('/:collection',async function (req, res) { + +router.get('/:collection',async function (req, res,next) +{ + start(req) + var collection = req.params.collection; + var query = Object.assign(req.params, req.query); var filter = await utils.getQueryFilter(query.filter); - var result = await connection.reqMongo(req,req.method,filter,req.params.collection) - res.status(200).json(result); + var result = await connection.reqMongo(req,req.method,filter,collection) - -}); - -router.post('/:collection',async function (req, res) { - var query = Object.assign(req.params, req.query); - var result = await connection.reqMongo(req, query) + end(req); res.status(200).json(result); + next(); }); -router.put('/:collection',async function (req, res) { - var query = Object.assign(req.params, req.query); - var result = await connection.reqMongo(req, query) - res.status(200).json(result); -}); +router.post('/:collection',async function (req, res,next) { + var collection = req.params.collection; -router.delete('/:collection',async function (req, res) { - var query = Object.assign(req.params, req.query); - var result = await connection.reqMongo(req, query) + var query = req.body; + var result = await connection.reqMongo(req,req.method,query,collection) res.status(200).json(result); + next(); }); +// router.put('/:collection',async function (req, res) { +// var query = Object.assign(req.params, req.query); +// var result = await connection.reqMongo(req, query) +// res.status(200).json(result); +// }); + +// router.delete('/:collection',async function (req, res) { +// var query = Object.assign(req.params, req.query); +// var result = await connection.reqMongo(req, query) +// res.status(200).json(result); +// }); + +function start(req) { + var cmd = req.params.collection; + log.startlog(req,cmd,'session','identity'); + stats.receiveRequest(req.method,cmd); + log.detailRequestFE(req); +}; + +function end(req) { + var collection = req.params.collection; + stats.sendResponse(req.method,collection); + log.detailResponseFE(req); +}; module.exports = router; \ No newline at end of file diff --git a/logs/app.log b/logs/app.log index 1f997c5..25d6229 100644 --- a/logs/app.log +++ b/logs/app.log @@ -1,20 +1,81 @@ -{"message":"phoenix-partner - :: ## - - ## BE Receive HTTP GET mongodb://10.1.2.155:27017/ response-header: undefined response-body: [{\"table\":\"get_spwHashtags\",\"value\":\"bbb\"}]","level":"info"} -{"message":"phoenix-partner - :: ## - - ## BE Receive HTTP GET mongodb://10.1.2.155:27017/ response-header: undefined response-body: [{\"table\":\"get_spwHashtags\",\"value\":\"bbb\"}]","level":"info"} -{"message":"phoenix-partner - :: ## - - ## BE Receive HTTP GET mongodb://10.1.2.155:27017/ response-header: undefined response-body: \"[{\\\"table\\\":\\\"get_spwHashtags\\\",\\\"value\\\":\\\"bbb\\\"}]\"","level":"info"} -{"message":"phoenix-partner - :: ## - - ## BE Receive HTTP GET mongodb://10.1.2.155:27017/ response-header: undefined response-body: [{\"table\":\"get_spwHashtags\",\"value\":\"bbb\"}]","level":"info"} -{"message":"phoenix-partner - :: ## - - ## BE Receive HTTP GET mongodb://10.1.2.155:27017/ response-header: undefined response-body: [{\"table\":\"get_spwHashtags\",\"value\":\"bbb\"}]","level":"info"} -{"message":"phoenix-partner - :: ## - - ## BE Receive HTTP GET mongodb://10.1.2.155:27017/ response-header: undefined response-body: [{\"table\":\"get_spwHashtags\",\"value\":\"bbb\"}]","level":"info"} -{"message":"phoenix-partner - :: ## - - ## BE Receive HTTP GET mongodb://10.1.2.155:27017/ response-header: undefined response-body: [{\"table\":\"get_spwHashtags\",\"value\":\"bbb\"}]","level":"info"} -{"message":"phoenix-partner - :: ## - - ## BE Receive HTTP GET mongodb://10.1.2.155:27017/ response-header: undefined response-body: [{\"table\":\"get_spwHashtags\",\"value\":\"bbb\"}]","level":"info"} -{"message":"phoenix-partner - :: ## - - ## BE Receive SQL Result: [{\"table\":\"get_spwHashtags\",\"value\":\"bbb\"}]","level":"info"} -{"message":"phoenix-partner - :: ## - - ## BE Receive SQL Result: [{\"table\":\"get_spwHashtags\",\"value\":\"bbb\"}]","level":"info"} -{"message":"phoenix-partner - :: ## - session - 001bed68-f6d3-4b43-b955-5178249d3e81 ## BE Receive SQL Result: [{\"table\":\"get_spwHashtags\",\"value\":\"bbb\"}]","level":"info"} -{"message":"phoenix-partner - :: ## - session - a78f627a-aef2-477a-ac52-d144167170f1 ## BE Receive SQL Result: [{\"table\":\"get_spwHashtags\",\"value\":\"bbb\"}]","level":"info"} -{"message":"phoenix-partner - :: ## - session - 85a0f68c-6543-4db9-9bb3-8f25a6597cb0 ## BE Send SQL Query: {\"table\":\"get_spwHashtags\"}","level":"info"} -{"message":"phoenix-partner - :: ## - session - 85a0f68c-6543-4db9-9bb3-8f25a6597cb0 ## BE Receive SQL Result: [{\"table\":\"get_spwHashtags\",\"value\":\"bbb\"}]","level":"info"} -{"message":"phoenix-partner - :: ## - session - 24b3d4de-356c-4bd4-a07b-c419a0466f57 ## BE Send SQL Query: {\"collection\":\"general\",\"filter\":\"(&(companyName=โรงพยาบาลเปาโล พหลโยธิน))\",\"fields\":\"companyName\"}","level":"info"} -{"message":"phoenix-partner - :: ## - session - 24b3d4de-356c-4bd4-a07b-c419a0466f57 ## BE Receive SQL Result: []","level":"info"} -{"message":"phoenix-partner - :: ## - session - 3a1fad66-0e0f-4499-848e-ac5dae13ba7f ## BE Send SQL Query: {\"companyName\":{}}","level":"info"} -{"message":"phoenix-partner - :: ## - session - 3a1fad66-0e0f-4499-848e-ac5dae13ba7f ## BE Receive SQL Result: []","level":"info"} -{"message":"phoenix-partner - :: ## - session - 330610bf-2f1f-4f45-a7b5-5a4d686eab52 ## BE Send SQL Query: {\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}","level":"info"} -{"message":"phoenix-partner - :: ## - session - 330610bf-2f1f-4f45-a7b5-5a4d686eab52 ## BE Receive SQL Result: []","level":"info"} +{"message":"phoenix-partner - :: ## - session - 04d98ad6-9059-4da1-bbbf-d7303d09dd2e ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 04d98ad6-9059-4da1-bbbf-d7303d09dd2e ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 1780404a-077a-4b70-a8c1-1b7d0571923c ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 1780404a-077a-4b70-a8c1-1b7d0571923c ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 8f655908-8aa4-4725-9d62-55ba2ea9d1ab ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 8f655908-8aa4-4725-9d62-55ba2ea9d1ab ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 506859e0-4b65-4f0f-a412-4d46cc19e5f5 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 7329ea83-69f1-404b-9e2c-26d12ac387ba ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 7329ea83-69f1-404b-9e2c-26d12ac387ba ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - df2b4246-948b-49fd-8a2e-68d5eb2fc341 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - df2b4246-948b-49fd-8a2e-68d5eb2fc341 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - c01c884a-0974-4ffe-ae15-4e718d22102c ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - c01c884a-0974-4ffe-ae15-4e718d22102c ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 6b72cc36-0b98-4748-bd94-24a2cb61f8fa ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 6b72cc36-0b98-4748-bd94-24a2cb61f8fa ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - b0ba16a9-bd43-43c6-b15d-b8a028186ee6 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - b0ba16a9-bd43-43c6-b15d-b8a028186ee6 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - b70a2d8a-7773-4f38-9fde-dc3be93846ea ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - b70a2d8a-7773-4f38-9fde-dc3be93846ea ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - d630c3ee-495d-4708-8332-b98b2f0be3d2 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - d630c3ee-495d-4708-8332-b98b2f0be3d2 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 02df435b-e197-4db8-9d53-3847d9ed5169 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 02df435b-e197-4db8-9d53-3847d9ed5169 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 823a373e-c3dd-4bd5-b623-48361a952bd0 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 823a373e-c3dd-4bd5-b623-48361a952bd0 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - d48011c1-f2b3-40bb-9090-18ef6c0f5b7e ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - d48011c1-f2b3-40bb-9090-18ef6c0f5b7e ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 71840e4c-231d-41dc-9d43-50a88b611980 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 71840e4c-231d-41dc-9d43-50a88b611980 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - a7a3a04c-df6e-4515-b851-c7c5282ee3b3 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - a7a3a04c-df6e-4515-b851-c7c5282ee3b3 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 23601cfc-b4d3-4b19-afcd-57c78820b83a ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 23601cfc-b4d3-4b19-afcd-57c78820b83a ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - c6efa713-d937-4cad-af8f-ad312a621bbc ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - c6efa713-d937-4cad-af8f-ad312a621bbc ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - a753c21e-8e1d-47d9-8e95-a55d5bdad3c5 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - a753c21e-8e1d-47d9-8e95-a55d5bdad3c5 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 594f180c-7bbc-40be-979b-f96098dda0eb ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 594f180c-7bbc-40be-979b-f96098dda0eb ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - fa98e57d-e0cf-4586-8b1e-751776699864 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - fa98e57d-e0cf-4586-8b1e-751776699864 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 12c6a016-ab6f-4c85-ba10-f45e1c3225f4 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 12c6a016-ab6f-4c85-ba10-f45e1c3225f4 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 1a1e9e3f-70ca-47db-aaeb-f1fd604fa418 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 1a1e9e3f-70ca-47db-aaeb-f1fd604fa418 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - d00c1de0-0efc-4972-826c-d474aa03d1a8 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - d00c1de0-0efc-4972-826c-d474aa03d1a8 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 7d6f045c-9556-4b80-9084-9c5c6991c730 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 7d6f045c-9556-4b80-9084-9c5c6991c730 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 60be9925-ae7a-4e2f-ac64-53a04444f9d1 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 60be9925-ae7a-4e2f-ac64-53a04444f9d1 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - ac1f92c2-e419-4015-aeb7-7a4ca0b50e3b ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - ac1f92c2-e419-4015-aeb7-7a4ca0b50e3b ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 19e0b589-3830-4312-b217-bd6aeb4d98fd ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 19e0b589-3830-4312-b217-bd6aeb4d98fd ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 5dfae968-dc62-45dc-810c-de7760786cfd ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 5dfae968-dc62-45dc-810c-de7760786cfd ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - f7b5c420-8948-4c44-801e-f692503a89c8 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - f7b5c420-8948-4c44-801e-f692503a89c8 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - f48ff59b-e4e2-413a-8a2f-5c164017277b ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - f48ff59b-e4e2-413a-8a2f-5c164017277b ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - cd1a1dd2-b3bf-4613-81ba-20a54a71509d ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - cd1a1dd2-b3bf-4613-81ba-20a54a71509d ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 72d831a2-f27d-4ba6-96eb-df88ff72b2a6 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 72d831a2-f27d-4ba6-96eb-df88ff72b2a6 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - ecbdab24-bd90-4d98-9864-51460f488c6a ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - ecbdab24-bd90-4d98-9864-51460f488c6a ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 2cb96fa4-8d9e-4014-868d-40f52a94a6b3 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 2cb96fa4-8d9e-4014-868d-40f52a94a6b3 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - a34107f5-9985-4057-afdf-80b0c3a556ce ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - a34107f5-9985-4057-afdf-80b0c3a556ce ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - cb93ee52-410c-4fcc-9705-40a15ff27589 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - cb93ee52-410c-4fcc-9705-40a15ff27589 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 40677992-5b74-4dea-aa23-bc00960e6c8f ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 40677992-5b74-4dea-aa23-bc00960e6c8f ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 74f770f3-fa62-42fc-9928-f38eb1bb7c7a ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 74f770f3-fa62-42fc-9928-f38eb1bb7c7a ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - a546d09f-50ae-4aa6-867c-f5218a5c8ac3 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - a546d09f-50ae-4aa6-867c-f5218a5c8ac3 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} +{"message":"phoenix-partner - :: ## - session - 4b3918ad-4407-4bb2-a213-a0da612da513 ## BE Send SQL Query: {}","level":"info"} +{"message":"phoenix-partner - :: ## - session - 4b3918ad-4407-4bb2-a213-a0da612da513 ## BE Receive SQL Result: [{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"},{\"companyName\":\"โรงพยาบาลเปาโล พหลโยธิน\"}]","level":"info"} diff --git a/logs/express-project b/logs/express-project deleted file mode 100644 index e69de29..0000000 --- a/logs/express-project +++ /dev/null diff --git a/node_modules/log4js/package.json b/node_modules/log4js/package.json index 88205ee..a63d933 100644 --- a/node_modules/log4js/package.json +++ b/node_modules/log4js/package.json @@ -1,5 +1,5 @@ { - "_from": "log4js@^3.0.4", + "_from": "log4js@^3.0.6", "_id": "log4js@3.0.6", "_inBundle": false, "_integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==", @@ -8,12 +8,12 @@ "_requested": { "type": "range", "registry": true, - "raw": "log4js@^3.0.4", + "raw": "log4js@^3.0.6", "name": "log4js", "escapedName": "log4js", - "rawSpec": "^3.0.4", + "rawSpec": "^3.0.6", "saveSpec": null, - "fetchSpec": "^3.0.4" + "fetchSpec": "^3.0.6" }, "_requiredBy": [ "#USER", @@ -21,8 +21,8 @@ ], "_resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz", "_shasum": "e6caced94967eeeb9ce399f9f8682a4b2b28c8ff", - "_spec": "log4js@^3.0.4", - "_where": "C:\\Users\\admin\\Documents\\express-project", + "_spec": "log4js@^3.0.6", + "_where": "C:\\myWork\\git\\hospital", "author": { "name": "Gareth Jones", "email": "gareth.nomiddlename@gmail.com" diff --git a/node_modules/log4js/types/log4js.d.ts b/node_modules/log4js/types/log4js.d.ts deleted file mode 100644 index 01d3e68..0000000 --- a/node_modules/log4js/types/log4js.d.ts +++ /dev/null @@ -1,297 +0,0 @@ -// Type definitions for log4js - -type Format = string | ((req: any, res: any, formatter: ((str: string) => string)) => string); - -export interface Log4js { - getLogger(category?: string): Logger; - configure(filename: string): Log4js; - configure(config: Configuration): Log4js; - addLayout(name: string, config: (a: any) => (logEvent: LoggingEvent) => string): void; - connectLogger(logger: Logger, options: { format?: Format; level?: string; nolog?: any; }): any; // express.Handler; - levels: Levels; - shutdown(cb: (error: Error) => void): void | null; -} - -export function getLogger(category?: string): Logger; - -export function configure(filename: string): Log4js; -export function configure(config: Configuration): Log4js; - -export function addLayout(name: string, config: (a: any) => (logEvent: LoggingEvent) => string): void; - -export function connectLogger(logger: Logger, options: { format?: Format; level?: string; nolog?: any; }): any; // express.Handler; - -export const levels: Levels; - -export function shutdown(cb?: (error: Error) => void): void | null; - -export interface BaseLayout { - type: 'basic'; -} - -export interface ColoredLayout { - type: 'colored' | 'coloured'; -} - -export interface MessagePassThroughLayout { - type: 'messagePassThrough'; -} - -export interface DummyLayout { - type: 'dummy'; -} - -export interface Level { - isEqualTo(other: string): boolean; - isEqualTo(otherLevel: Level): boolean; - isLessThanOrEqualTo(other: string): boolean; - isLessThanOrEqualTo(otherLevel: Level): boolean; - isGreaterThanOrEqualTo(other: string): boolean; - isGreaterThanOrEqualTo(otherLevel: Level): boolean; -} - -export interface LoggingEvent { - categoryName: string; // name of category - level: Level; // level of message - data: any[]; // objects to log - startTime: Date; - pid: number; - context: any; - cluster?: { - workerId: number; - worker: number; - }; -} - -export type Token = ((logEvent: LoggingEvent) => string) | string; - -export interface PatternLayout { - type: 'pattern'; - // specifier for the output format, using placeholders as described below - pattern: string; - // user-defined tokens to be used in the pattern - tokens?: { [name: string]: Token }; -} - -export interface CustomLayout { - [key: string]: any; - type: string; -} - -export type Layout = BaseLayout | ColoredLayout | MessagePassThroughLayout | DummyLayout | PatternLayout | CustomLayout; - -/** - * Category Filter - * - * @see https://log4js-node.github.io/log4js-node/categoryFilter.html - */ -export interface CategoryFilterAppender { - type: "categoryFilter"; - // the category (or categories if you provide an array of values) that will be excluded from the appender. - exclude?: string | string[]; - // the name of the appender to filter. see https://log4js-node.github.io/log4js-node/layouts.html - appender?: string; -} - -/** - * Console Appender - * - * @see https://log4js-node.github.io/log4js-node/console.html - */ -export interface ConsoleAppender { - type: 'console'; - // defaults to colouredLayout - layout?: Layout; -} - -export interface FileAppender { - type: 'file'; - // the path of the file where you want your logs written. - filename: string; - // the maximum size (in bytes) for the log file. If not specified, then no log rolling will happen. - maxLogSize?: number | string; - // (default value = 5) - the number of old log files to keep during log rolling. - backups?: number; - // defaults to basic layout - layout?: Layout; - numBackups?: number; - compress?: boolean; // compress the backups - // keep the file extension when rotating logs - keepFileExt?: boolean; - encoding?: string; - mode?: number; - flags?: string; -} - -export interface SyncfileAppender { - type: 'fileSync'; - // the path of the file where you want your logs written. - filename: string; - // the maximum size (in bytes) for the log file. If not specified, then no log rolling will happen. - maxLogSize?: number | string; - // (default value = 5) - the number of old log files to keep during log rolling. - backups?: number; - // defaults to basic layout - layout?: Layout; -} - -export interface DateFileAppender { - type: 'dateFile'; - // the path of the file where you want your logs written. - filename: string; - // defaults to basic layout - layout?: Layout; - // defaults to .yyyy-MM-dd - the pattern to use to determine when to roll the logs. - /** - * The following strings are recognised in the pattern: - * - yyyy : the full year, use yy for just the last two digits - * - MM : the month - * - dd : the day of the month - * - hh : the hour of the day (24-hour clock) - * - mm : the minute of the hour - * - ss : seconds - * - SSS : milliseconds (although I'm not sure you'd want to roll your logs every millisecond) - * - O : timezone (capital letter o) - */ - pattern?: string; - // default “utf-8” - encoding?: string; - // default 0644 - mode?: number; - // default ‘a’ - flags?: string; - // compress the backup files during rolling (backup files will have .gz extension)(default false) - compress?: boolean; - // include the pattern in the name of the current log file as well as the backups.(default false) - alwaysIncludePattern?: boolean; - // keep the file extension when rotating logs - keepFileExt?: boolean; - // if this value is greater than zero, then files older than that many days will be deleted during log rolling.(default 0) - daysToKeep?: number; -} - -export interface LogLevelFilterAppender { - type: 'logLevelFilter'; - // the name of an appender, defined in the same configuration, that you want to filter - appender: string; - // the minimum level of event to allow through the filter - level: string; - // (defaults to FATAL) - the maximum level of event to allow through the filter - maxLevel?: string; -} - -export interface MultiFileAppender { - type: 'multiFile'; - // the base part of the generated log filename - base: string; - // the value to use to split files (see below). - property: string; - // the suffix for the generated log filename. - extension: string; -} - -export interface MultiprocessAppender { - type: 'multiprocess'; - // controls whether the appender listens for log events sent over the network, or is responsible for serialising events and sending them to a server. - mode: 'master' | 'worker'; - // (only needed if mode == master)- the name of the appender to send the log events to - appender?: string; - // (defaults to 5000) - the port to listen on, or send to - loggerPort?: number; - // (defaults to localhost) - the host/IP address to listen on, or send to - loggerHost?: string; -} - -export interface RecordingAppender { - type: 'recording'; -} - -export interface StandardErrorAppender { - type: 'stderr'; - // (defaults to colouredLayout) - layout?: Layout; -} - -export interface StandardOutputAppender { - type: 'stdout'; - // (defaults to colouredLayout) - layout?: Layout; -} - -export interface CustomAppender { - type: string; - [key: string]: any; -} - -export type Appender = CategoryFilterAppender - | ConsoleAppender - | FileAppender - | SyncfileAppender - | DateFileAppender - | LogLevelFilterAppender - | MultiFileAppender - | MultiprocessAppender - | RecordingAppender - | StandardErrorAppender - | StandardOutputAppender - | CustomAppender; - -export interface Levels { - ALL: Level; - MARK: Level; - TRACE: Level; - DEBUG: Level; - INFO: Level; - WARN: Level; - ERROR: Level; - FATAL: Level; - OFF: Level; - levels: Level[]; - getLevel(level: string): Level; -} - -export interface Configuration { - appenders: { [name: string]: Appender; }; - categories: { [name: string]: { appenders: string[]; level: string; } }; - pm2?: boolean; - pm2InstanceVar?: string; - levels?: Levels; - disableClustering?: boolean; -} - -export class Logger { - new(dispatch: Function, name: string): Logger; - - level: string; - - log(...args: any[]): void; - - isLevelEnabled(level?: string): boolean; - - isTraceEnabled(): boolean; - isDebugEnabled(): boolean; - isInfoEnabled(): boolean; - isWarnEnabled(): boolean; - isErrorEnabled(): boolean; - isFatalEnabled(): boolean; - - _log(level: string, data: any): void; - - addContext(key: string, value: any): void; - - removeContext(key: string): void; - - clearContext(): void; - - trace(message: any, ...args: any[]): void; - - debug(message: any, ...args: any[]): void; - - info(message: any, ...args: any[]): void; - - warn(message: any, ...args: any[]): void; - - error(message: any, ...args: any[]): void; - - fatal(message: any, ...args: any[]): void; -} diff --git a/node_modules/log4js/types/test.ts b/node_modules/log4js/types/test.ts deleted file mode 100644 index 26d1888..0000000 --- a/node_modules/log4js/types/test.ts +++ /dev/null @@ -1,131 +0,0 @@ -import * as log4js from './log4js'; - -log4js.configure('./filename'); -const logger1 = log4js.getLogger(); -logger1.level = 'debug'; -logger1.debug("Some debug messages"); -logger1.fatal({ - whatever: 'foo' -}) - -const logger3 = log4js.getLogger('cheese'); -logger3.trace('Entering cheese testing'); -logger3.debug('Got cheese.'); -logger3.info('Cheese is Gouda.'); -logger3.warn('Cheese is quite smelly.'); -logger3.error('Cheese is too ripe!'); -logger3.fatal('Cheese was breeding ground for listeria.'); - -log4js.configure({ - appenders: { cheese: { type: 'console', filename: 'cheese.log' } }, - categories: { default: { appenders: ['cheese'], level: 'error' } } -}); - -log4js.configure({ - appenders: { - out: { type: 'file', filename: 'pm2logs.log' } - }, - categories: { - default: { appenders: ['out'], level: 'info' } - }, - pm2: true, - pm2InstanceVar: 'INSTANCE_ID' -}); - -log4js.addLayout('json', config => function (logEvent) { - return JSON.stringify(logEvent) + config.separator; -}); - -log4js.configure({ - appenders: { - out: { type: 'stdout', layout: { type: 'json', separator: ',' } } - }, - categories: { - default: { appenders: ['out'], level: 'info' } - } -}); - -log4js.configure({ - appenders: { - file: { type: 'dateFile', filename: 'thing.log', pattern: '.mm' } - }, - categories: { - default: { appenders: ['file'], level: 'debug' } - } -}); - -const logger4 = log4js.getLogger('thing'); -logger4.log('logging a thing'); - -const logger5 = log4js.getLogger('json-test'); -logger5.info('this is just a test'); -logger5.error('of a custom appender'); -logger5.warn('that outputs json'); -log4js.shutdown(() => { }); - -log4js.configure({ - appenders: { - cheeseLogs: { type: 'file', filename: 'cheese.log' }, - console: { type: 'console' } - }, - categories: { - cheese: { appenders: ['cheeseLogs'], level: 'error' }, - another: { appenders: ['console'], level: 'trace' }, - default: { appenders: ['console', 'cheeseLogs'], level: 'trace' } - } -}); - -const logger6 = log4js.getLogger('cheese'); -// only errors and above get logged. -const otherLogger = log4js.getLogger(); - -// this will get coloured output on console, and appear in cheese.log -otherLogger.error('AAArgh! Something went wrong', { some: 'otherObject', useful_for: 'debug purposes' }); -otherLogger.log('This should appear as info output'); - -// these will not appear (logging level beneath error) -logger6.trace('Entering cheese testing'); -logger6.debug('Got cheese.'); -logger6.info('Cheese is Gouda.'); -logger6.log('Something funny about cheese.'); -logger6.warn('Cheese is quite smelly.'); -// these end up only in cheese.log -logger6.error('Cheese %s is too ripe!', 'gouda'); -logger6.fatal('Cheese was breeding ground for listeria.'); - -// these don't end up in cheese.log, but will appear on the console -const anotherLogger = log4js.getLogger('another'); -anotherLogger.debug('Just checking'); - -// will also go to console and cheese.log, since that's configured for all categories -const pantsLog = log4js.getLogger('pants'); -pantsLog.debug('Something for pants'); - - -import { configure, getLogger } from './log4js'; -configure('./filename'); -const logger2 = getLogger(); -logger2.level = 'debug'; -logger2.debug("Some debug messages"); - -configure({ - appenders: { cheese: { type: 'file', filename: 'cheese.log' } }, - categories: { default: { appenders: ['cheese'], level: 'error' } } -}); - -log4js.configure('./filename').getLogger(); -const logger7 = log4js.getLogger(); -logger7.level = 'debug'; -logger7.debug("Some debug messages"); - -const levels: log4js.Levels = log4js.levels; -const level: log4js.Level = levels.getLevel('info'); - -log4js.connectLogger(logger1, { - format: ':x, :y', - level: 'info' -}); - -log4js.connectLogger(logger2, { - format: (req, _res, format) => format(`:remote-addr - ${req.id} - ":method :url HTTP/:http-version" :status :content-length ":referrer" ":user-agent"`) -}); diff --git a/node_modules/log4js/types/tsconfig.json b/node_modules/log4js/types/tsconfig.json deleted file mode 100644 index 35b9d6f..0000000 --- a/node_modules/log4js/types/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "strict": true, - "noUnusedParameters": true, - "noUnusedLocals": false, - "noEmit": true - } -} diff --git a/package-lock.json b/package-lock.json index 64d7327..c736779 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,11 @@ "lodash.kebabcase": "4.1.1" } }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", @@ -27,6 +32,17 @@ "negotiator": "0.6.1" } }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", @@ -52,6 +68,20 @@ "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=" }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.6" + } + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -78,6 +108,11 @@ "lodash": "4.17.11" } }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, "aws-sign2": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", @@ -101,6 +136,14 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -241,6 +284,11 @@ "es6-object-assign": "1.1.0" } }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + }, "circular-json": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.7.tgz", @@ -256,6 +304,16 @@ "wordwrap": "0.0.2" } }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, "color": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", @@ -319,6 +377,18 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" }, + "commonlog-kb": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/commonlog-kb/-/commonlog-kb-1.3.5.tgz", + "integrity": "sha512-kU73yTQtO67Cs84+OL8Fi/xlbIT1fQ+vl4pcd69kkW+8PU2JZD9lRtcJ+K/AeKh+LUiTQdxrsQP/9sUJG4UD1A==", + "requires": { + "dateformat": "3.0.3", + "node-cron": "1.2.1", + "on-headers": "1.0.1", + "rotating-file-stream": "1.3.9", + "sqlite3": "4.0.2" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -363,6 +433,11 @@ } } }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -435,6 +510,11 @@ "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=" }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -448,11 +528,21 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, "delayed-stream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=" }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -463,6 +553,11 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, "diagnostics": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", @@ -646,6 +741,16 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, "fast-safe-stringify": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", @@ -715,11 +820,34 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "requires": { + "minipass": "2.3.4" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" + } + }, "generate-function": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", @@ -769,6 +897,11 @@ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, "har-validator": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", @@ -793,6 +926,11 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, "hawk": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", @@ -851,6 +989,14 @@ "safer-buffer": "2.1.2" } }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "requires": { + "minimatch": "3.0.4" + } + }, "indicative": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/indicative/-/indicative-3.0.6.tgz", @@ -881,6 +1027,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, "ipaddr.js": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", @@ -896,6 +1047,14 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, "is-my-ip-valid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", @@ -948,6 +1107,11 @@ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -1154,6 +1318,23 @@ "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, + "minipass": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.4.tgz", + "integrity": "sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w==", + "requires": { + "safe-buffer": "5.1.2", + "yallist": "3.0.2" + } + }, + "minizlib": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.1.tgz", + "integrity": "sha512-TrfjCjk4jLhcJyGMYymBH6oTXcWjYbUAXTHDbtnWHjZC25h0cdajHuPE1zxb4DVmu8crfh+HwH/WMuyLG0nHBg==", + "requires": { + "minipass": "2.3.4" + } + }, "mkdirp": { "version": "0.5.1", "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -1228,6 +1409,18 @@ "saslprep": "1.0.2" } }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "requires": { + "basic-auth": "2.0.1", + "debug": "2.6.9", + "depd": "1.1.2", + "on-finished": "2.3.0", + "on-headers": "1.0.1" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -1256,11 +1449,26 @@ "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", "optional": true }, + "needle": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", + "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.23", + "sax": "1.2.4" + } + }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, + "node-cron": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-1.2.1.tgz", + "integrity": "sha1-jJC8XccjpWKJsHhmVatKHEy2A2g=" + }, "node-forge": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", @@ -1271,11 +1479,82 @@ "resolved": "https://registry.npmjs.org/node-json-config/-/node-json-config-0.0.4.tgz", "integrity": "sha1-6e+xih5l/TSMudKVGIlwjmaEheo=" }, + "node-pre-gyp": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", + "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", + "requires": { + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.4", + "nopt": "4.0.1", + "npm-packlist": "1.1.12", + "npmlog": "4.1.2", + "rc": "1.2.8", + "rimraf": "2.6.2", + "semver": "5.6.0", + "tar": "4.4.6" + }, + "dependencies": { + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "7.1.2" + } + } + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.5" + } + }, + "npm-bundled": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", + "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==" + }, + "npm-packlist": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.12.tgz", + "integrity": "sha512-WJKFOVMeAlsU/pjXuqVdzU0WfgtIBCupkEVwn+1Y0ERAbUfWw8R4GjgVbaKnUjRoD2FoQbHOCbOyT5Mbs9Lw4g==", + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.5" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "1.1.5", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, "oauth-sign": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -1302,6 +1581,25 @@ "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, "p-lazy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-lazy/-/p-lazy-1.0.0.tgz", @@ -1404,6 +1702,11 @@ "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -1446,6 +1749,11 @@ "ipaddr.js": "1.8.0" } }, + "psl": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -1482,6 +1790,24 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, "readable-stream": { "version": "2.3.6", "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", @@ -1635,6 +1961,11 @@ } } }, + "rotating-file-stream": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/rotating-file-stream/-/rotating-file-stream-1.3.9.tgz", + "integrity": "sha512-LQEN1lYP/fOvNsjJsfQUW93cXRxt5Yp0BHVxUhreZAjFRlQ4Hyv7Pt6MKuek8U2ZpKpA8dvKvjzyOapvsRK7Fg==" + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -1701,11 +2032,21 @@ "send": "0.16.2" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -1736,6 +2077,139 @@ "memory-pager": "1.1.0" } }, + "sqlite3": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.2.tgz", + "integrity": "sha512-51ferIRwYOhzUEtogqOa/y9supADlAht98bF/gbIi6WkzRJX6Yioldxbzj1MV4yV+LgdKD/kkHwFTeFXOG4htA==", + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.10.3", + "request": "2.88.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.20" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.6", + "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "1.0.0" + } + } + } + }, + "har-validator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", + "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.15.1" + } + }, + "nan": { + "version": "2.10.0", + "resolved": "http://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.1.0", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.20", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "1.1.29", + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, "sshpk": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.1.tgz", @@ -1795,6 +2269,16 @@ } } }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -1816,11 +2300,30 @@ "ansi-regex": "2.1.1" } }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, + "tar": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.6.tgz", + "integrity": "sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==", + "requires": { + "chownr": "1.1.1", + "fs-minipass": "1.2.5", + "minipass": "2.3.4", + "minizlib": "1.1.1", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.2" + } + }, "text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", @@ -1964,6 +2467,14 @@ } } }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "1.0.2" + } + }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", @@ -2074,6 +2585,11 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" + }, "yargs": { "version": "3.10.0", "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", diff --git a/package.json b/package.json index 0c15f49..da6ef0d 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "dependencies": { "app-module-path": "^2.2.0", "body-parser": "^1.18.3", + "commonlog-kb": "^1.3.5", "connect-flash": "^0.1.1", "connect-redis": "^3.4.0", "cookie-parser": "^1.4.3", @@ -24,6 +25,7 @@ "mocha": "^5.2.0", "moment": "^2.22.2", "mongodb": "^3.1.8", + "morgan": "^1.9.1", "node-json-config": "0.0.4", "passport": "^0.4.0", "passport-local": "^1.0.0", diff --git a/utils/config.js b/utils/config.js index 05b64cc..b7bcd22 100644 --- a/utils/config.js +++ b/utils/config.js @@ -6,17 +6,17 @@ const NodeJsonConfig = require('node-json-config'); const conf = new NodeJsonConfig('app.config.json'); let defaultConfObj = conf.get('default'); -console.log('defaultConfObj'); -console.log(defaultConfObj); +// console.log('defaultConfObj'); +// console.log(defaultConfObj); let envConfObj = conf.get(nodeEnv); -console.log('envConfObj'); -console.log(envConfObj); +// console.log('envConfObj'); +// console.log(envConfObj); let currentConfObj = Object.assign(defaultConfObj, envConfObj); -console.log('currentConfObj'); -console.log(currentConfObj); +// console.log('currentConfObj'); +// console.log(currentConfObj); conf.put(nodeEnv, currentConfObj); diff --git a/utils/constants.js b/utils/constants.js new file mode 100644 index 0000000..dca4d41 --- /dev/null +++ b/utils/constants.js @@ -0,0 +1,90 @@ +module.exports = Object.freeze({ + REQUEST: 'Request', + RESPONSE: 'Response', + SUCCESS: 'Success', + ERROR: 'Error', + FAIL: 'Fail', + URLKEYWORD : ["filter","offset","orderby","limit","fields"], + METHOD:{ + GET : 'GET', + POST : 'POST', + PUT : 'PUT', + DELETE : 'DELETE' + }, + RESPONSECONN:{ + STATS:{ + ETIMEDOUT:'ETIMEDOUT', + ECONNREFUSED : 'ECONNREFUSED', + ESOCKETTIMEDOUT : 'ESOCKETTIMEDOUT', + MISSING : 'Missing' + }, + MESSAGE:{ + ETIMEDOUT:{ + resultCode : 'null', + resultDescription : 'Time out' + }, + ECONNREFUSED:{ + resultCode : 'null', + resultDescription : 'Reject' + }, + ESOCKETTIMEDOUT:{ + resultCode : 'null', + resultDescription : 'Time out' + }, + EOTHERERROR:{ + resultCode : 'null', + resultDescription : 'Error' + }, + ERROR:{ + resultCode : '50000', + resultDescription : 'System error' + }, + SUCCESS:{ + resultCode : '20000', + resultDescription : 'Success' + }, + EXCEED:{ + resultCode : '40302', + resultDescription : 'Exceed data allowances' + }, + DBERROR:{ + resultCode : '50001', + resultDescription : 'Database error' + }, + SUCCESSWITHCON:{ + resultCode : '20001', + resultDescription : 'Success with condition' + } + } + }, + RESPONSERESULT:{ + SUCCESS:{ + resultCode : '20000', + developerMessage : 'Success' + }, + MISSING_INVALID:{ + resultCode : '40300', + developerMessage : 'Missing or invalid parameter' + }, + DATA_NOT_FOUND:{ + resultCode : '40401', + developerMessage : 'Data Not Found' + }, + DATA_EXIST:{ + resultCode : '40301', + developerMessage : 'Data Exist' + }, + ERROR:{ + resultCode : '50000', + developerMessage : 'System error' + }, + DENIED:{ + resultCode : '40100', + developerMessage : 'Access Denied' + }, + UNKNOW:{ + resultCode : '40400', + developerMessage : 'Unknown URL' + } + } +}); \ No newline at end of file diff --git a/utils/errors.js b/utils/errors.js deleted file mode 100644 index 09fc217..0000000 --- a/utils/errors.js +++ /dev/null @@ -1,16 +0,0 @@ -class ValidationError extends Error { - constructor(err, ...params) { - super(...params); - this.instance = err; - } -} - -class UnirestError extends Error { - constructor(err, ...params) { - super(...params); - this.instance = err; - } -} - -module.exports.ValidationError = ValidationError; -module.exports.UnirestError = UnirestError; \ No newline at end of file diff --git a/utils/log.js b/utils/log.js new file mode 100644 index 0000000..fe8e02b --- /dev/null +++ b/utils/log.js @@ -0,0 +1,264 @@ +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 = []; + +var 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,method,data) +{ + logger4jDetail.info(logPrefix(req)+method+": "+JSON.stringify(data)); +} + +logger.detailSqlResult = function(req,method,data) +{ + logger4jDetail.info(logPrefix(req)+method+": "+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; diff --git a/utils/mongoDB.js b/utils/mongoDB.js index 54606d9..3ef503a 100644 --- a/utils/mongoDB.js +++ b/utils/mongoDB.js @@ -1,4 +1,5 @@ -const logger = require('./request-logger'); +const log = require('./log'); +var constants = require('./constants'); var MongoClient = require('mongodb').MongoClient; var config = require('./config'); @@ -16,93 +17,82 @@ connection.reqMongo = async function (req,method, query, collection) { function mongoReq(req,url,database,method, query, collection){ - - logger.logSqlQuery({id : "session", reqId : req.id}, query); + + var nodeName = "MongoDB"; + var funStats = { + detailSqlQuery : function(query){log.detailSqlQuery(req,method,query);}, + detailSqlResult : function(result, err){log.detailSqlResult(req,method,result || err);}, + addSuccessSummary : function(result){log.addSuccessSummary(req,nodeName,collection,result);}, + addErrorSummary : function(result){log.addErrorSummary(req,nodeName,collection,result);} + }; + + return new Promise((resolve, reject) => { MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) { if (err) { - console.log(err) - logger.logSqlResult({id : "session", reqId : req.id}, err.errmsg); - resolve({ - resultCode : "50001", - message : err.errmsg - }); + console.log(err) + resolve(constants.RESPONSECONN.MESSAGE.DBERROR); } - + funStats.detailSqlQuery(query); + var dbInstant = db.db(database).collection(collection); switch (method) { - case "GET": - db.db(database).collection(collection).find(query, { projection: { _id: 0 } }).toArray(function(err, result) { - db.close(); - - if (err) { - console.log(err) - resolve(checkResponse(req,{err:err})); - }else - resolve(checkResponse(req,result)); + case constants.METHOD.GET: + dbInstant.find(query, { projection: { _id: 0 } }).toArray(function(err, result) { + resolve(checkResponse(result,err,funStats)); }); break; - case "POST": - db.db(database).collection(collection).find(query, { projection: { _id: 0 } }).toArray(function(err, result) { - db.close(); - - if (err) { - console.log(err) - resolve(checkResponse(req,{err:err})); - }else - resolve(checkResponse(req,result)); + case constants.METHOD.POST: + db.db(database).collection(collection).insertOne(query, function(err, result) { + var response = checkResponse(result,err,funStats); + delete response.resultData; + resolve(response); }); break; case "PUT": - db.db(database).collection(collection).find(query, { projection: { _id: 0 } }).toArray(function(err, result) { - db.close(); + // db.db(database).collection(collection).find(query, { projection: { _id: 0 } }).toArray(function(err, result) { + // db.close(); - if (err) { - console.log(err) - resolve(checkResponse(req,{err:err})); - }else - resolve(checkResponse(req,result)); - }); + // if (err) { + // console.log(err) + // resolve(checkResponse(req,{err:err})); + // }else + // resolve(checkResponse(req,result)); + // }); break; case "DELETE": - db.db(database).collection(collection).find(query, { projection: { _id: 0 } }).toArray(function(err, result) { - db.close(); + // db.db(database).collection(collection).find(query, { projection: { _id: 0 } }).toArray(function(err, result) { + // db.close(); - if (err) { - console.log(err) - resolve(checkResponse(req,{err:err})); - }else - resolve(checkResponse(req,result)); - }); + // if (err) { + // console.log(err) + // resolve(checkResponse(req,{err:err})); + // }else + // resolve(checkResponse(req,result)); + // }); break; } - - + db.close(); }); }); } -function checkResponse(req,response) -{ - - - if(response.err) - { - logger.logSqlResult({id : "session", reqId : req.id}, err.errmsg); - var returnData = { - resultCode : "50001", - message : response.err.errmsg - }; - }else +function checkResponse(result,err,funStats) +{ + + funStats.detailSqlResult(result, err); + if(err) { - logger.logSqlResult({id : "session", reqId : req.id}, response); - var returnData = { - resultCode : "20000", - resultDescription : "Success", - resultData : response - }; + var returnData = constants.RESPONSECONN.MESSAGE.DBERROR; + funStats.addErrorSummary(returnData); + } + else + { + var returnData = constants.RESPONSECONN.MESSAGE.SUCCESS; + returnData.resultData = result; + funStats.addSuccessSummary(returnData); } return returnData diff --git a/utils/passport-func.js b/utils/passport-func.js deleted file mode 100644 index 0dd940b..0000000 --- a/utils/passport-func.js +++ /dev/null @@ -1,71 +0,0 @@ -const passport = require('passport'); -const LocalStrategy = require('passport-local').Strategy; -const SamlStrategy = require('passport-saml').Strategy; -const conf = require('utils/config'); - -const passportFunctionLocal = function (username, password, done) { - console.log('checking username and password...'); - if (username === 'admin' && password === 'passw0rd') { - const user = { - id: 1, - username: username - }; - console.log('checking username and password... Passed'); - return done(null, user); - } else { - console.log('checking username and password... Failed'); - return done(null, false, {message: 'Incorrect credentials'}); - } -}; - -const passportFunctionSaml = function(profile, done) { - return done(null, - { - userName: profile.userName, - email: profile.email, - firstName: profile.firstName, - lastName: profile.lastName, - fullName: profile.fullName - }); -}; - -module.exports = function() { - - passport.serializeUser(function(user, done) { - console.log('serialize'); - done(null, user); - }); - - passport.deserializeUser(function(user, done) { - console.log('deserialize'); - done(null, user); - }); - - let PassportStrategy, passportConfig, passportFunction; - switch(conf.get('passport.strategy')) { - case "local": - PassportStrategy = LocalStrategy; - passportConfig = conf.get('passport.configStrategy.local'); - passportFunction = passportFunctionLocal; - break; - case "saml": - PassportStrategy = SamlStrategy; - passportConfig = conf.get('passport.configStrategy.saml'); - passportFunction = passportFunctionSaml; - break; - default: - PassportStrategy = null; - break; - } - - if (PassportStrategy) { - console.log('setup passport strategy'); - console.log(conf.get('passport.strategy')); - console.log(passportConfig); - console.log(passportFunction); - console.log(PassportStrategy); - passport.use(new PassportStrategy(passportConfig, passportFunction)); - } - - return passport; -}; \ No newline at end of file diff --git a/utils/request-logger.js b/utils/request-logger.js deleted file mode 100644 index fe6da7b..0000000 --- a/utils/request-logger.js +++ /dev/null @@ -1,67 +0,0 @@ -const winston = require('winston'); -const fs = require('fs'); -const moment = require('moment'); - -let logDir = 'logs'; // directory path you want to set -if ( !fs.existsSync( logDir ) ) { - // Create the directory if it does not exist - fs.mkdirSync( logDir ); -} - -function RequestLogger() { - this.fileTransport = new winston.transports.File({ - timestamp: function() { - return moment().format('YYYY-MM-DDTHH:mm:ss.SSS'); - }, - json: false, - filename: 'logs/app.log', - maxsize: 10240000, - maxFiles: 99, - tailable: true - }); - - this.logger = winston.createLogger({ - transports: [this.fileTransport] - }); - - this.logPrefix = function(session) { - let userId = ''; - let sessionId = session.id || ''; - let reqId = session.reqId || ''; - let msg = `phoenix-partner - :: ## ${userId} - ${sessionId} - ${reqId} ## `; - return msg; - }; -} - -RequestLogger.prototype.logRequest = function(reqMethod, reqUrl, session, data, header) { - header = JSON.stringify(header); - data = JSON.stringify(data); - let msg = this.logPrefix(session) + `BE Send HTTP ${reqMethod} ${reqUrl} request-header: ${header} request-body: ${data}`; - this.logger.info(msg); -}; - -RequestLogger.prototype.logResponse = function(reqMethod, reqUrl, session, data, header) { - header = JSON.stringify(header); - data = JSON.stringify(data); - let msg = this.logPrefix(session) + `BE Receive HTTP ${reqMethod} ${reqUrl} response-header: ${header} response-body: ${data}`; - this.logger.info(msg); -}; - -RequestLogger.prototype.logSqlQuery = function(session, data) { - data = JSON.stringify(data); - let msg = this.logPrefix(session) + `BE Send SQL Query: ${data}`; - this.logger.info(msg); -}; - -RequestLogger.prototype.logSqlResult = function(session, data) { - data = JSON.stringify(data); - let msg = this.logPrefix(session) + `BE Receive SQL Result: ${data}`; - this.logger.info(msg); -}; - -RequestLogger.prototype.debug = function(msg) { - msg = this.logPrefix(session) + ' ' + msg; - this.logger.debug(msg); -}; - -module.exports = new RequestLogger(); \ No newline at end of file diff --git a/utils/send-response.js b/utils/send-response.js index 072db89..91e914a 100644 --- a/utils/send-response.js +++ b/utils/send-response.js @@ -1,5 +1,3 @@ -const ValidationError = require('utils/errors').ValidationError; -const UnirestError = require('utils/errors').UnirestError; let sendResponse = {}; @@ -13,26 +11,26 @@ sendResponse.missingOrInvalidResponse = (param) => { }; -sendResponse.handleError = function(error) { - console.log('catch ' + error); - let errResponse = {}; - if (error instanceof ValidationError) { - errResponse = { - code: 403, - object: this.missingOrInvalidResponse(error.instance[0].message) - }; - } else if (error instanceof UnirestError) { - errResponse = { - code: 500, - object: error.instance - }; - } else { - errResponse = { - code: 500, - object: { message: "System Error" } - }; - } - return errResponse; -}; +// sendResponse.handleError = function(error) { +// console.log('catch ' + error); +// let errResponse = {}; +// if (error instanceof ValidationError) { +// errResponse = { +// code: 403, +// object: this.missingOrInvalidResponse(error.instance[0].message) +// }; +// } else if (error instanceof UnirestError) { +// errResponse = { +// code: 500, +// object: error.instance +// }; +// } else { +// errResponse = { +// code: 500, +// object: { message: "System Error" } +// }; +// } +// return errResponse; +// }; module.exports = sendResponse; diff --git a/utils/stats.js b/utils/stats.js new file mode 100644 index 0000000..d3b13ae --- /dev/null +++ b/utils/stats.js @@ -0,0 +1,41 @@ +var config = require('./config'); +var log = require('./log.js'); +var constants = require('./constants.js'); + +var nodeName = config.get("appName"); +var stat = []; + + +//client and Node +stat.receiveRequest = function (method,cmd,from){ + writeStats(nodeName+" receive "+method+" "+cmd+" request from "+(from?from:"Client")); +}; + +stat.sendResponse = function (method,cmd,to){ + writeStats(nodeName+" send "+method+" "+cmd+" response to "+(to?to:"Client")); +}; + +//node and mongo +stat.sendQuery = function (cmd,to){ + writeStats(nodeName+" send QUERY "+cmd+" request to "+(to?to:"MongoDB")); +}; + +stat.receiveQuery = function (cmd,from){ + writeStats(nodeName+" receive QUERY "+cmd+" response from "+(from?from:"MongoDB")); +}; + +//unknow +stat.receiveUnknow = function(message){ + writeStats(nodeName+" Receive "+message+" "+constants.REQUEST); +}; + +stat.sendUnknow = function(message){ + writeStats(nodeName+" Send "+message); +}; + +function writeStats(string) { + log.log(string); + log.stat(string); +} + +module.exports = stat; \ No newline at end of file diff --git a/utils/utils.js b/utils/utils.js index c722704..c04b924 100644 --- a/utils/utils.js +++ b/utils/utils.js @@ -59,8 +59,13 @@ utils.getUpdateFilter = function(obj) utils.getQueryFilter = async function(data) { - var filter = parseFilter(data); - return getQuery(filter); + if(data) + { + var filter = parseFilter(data); + return getQuery(filter); + }else + return {}; + } getQuery = async function(data,query){ @@ -178,4 +183,17 @@ function findValueInBracket(data) } +utils.undefinedToNull = function(data){ + if(!data){ + data = 'null'; + } else if(data.includes('undefined')){ + data = data.replace(/undefined/g,'null'); + } else { + data = data; + } + + return data; +} + + module.exports = utils; \ No newline at end of file diff --git a/utils/validator.js b/utils/validator.js deleted file mode 100644 index 2af511f..0000000 --- a/utils/validator.js +++ /dev/null @@ -1,11 +0,0 @@ -const indicative = require('indicative'); -const ValidationError = require('utils/errors').ValidationError; - - -module.exports = function(data, rules) { - return indicative.validate(data, rules) - .catch((err) => { - return Promise.reject(new ValidationError(err)); - } - ) -}; \ No newline at end of file diff --git a/utils/winston-express-middleware/index.js b/utils/winston-express-middleware/index.js deleted file mode 100644 index 9e01f5e..0000000 --- a/utils/winston-express-middleware/index.js +++ /dev/null @@ -1,305 +0,0 @@ -// Copyright (c) 2012-2014 Heapsource.com and Contributors - http://www.heapsource.com -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -var winston = require('winston'); -var util = require('util'); -var chalk = require('chalk'); - -//Allow this file to get an exclusive copy of underscore so it can change the template settings without affecting others -delete require.cache[require.resolve('lodash')]; -var _ = require('lodash'); -delete require.cache[require.resolve('lodash')]; - -/** - * A default list of properties in the request object that are allowed to be logged. - * These properties will be safely included in the meta of the log. - * 'body' is not included in this list because it can contains passwords and stuff that are sensitive for logging. - * TODO: Include 'body' and get the defaultRequestFilter to filter the inner properties like 'password' or 'password_confirmation', etc. Pull requests anyone? - * @type {Array} - */ -var requestWhitelist = ['url', 'headers', 'method', 'httpVersion', 'originalUrl', 'query']; - -/** - * A default list of properties in the request body that are allowed to be logged. - * This will normally be empty here, since it should be done at the route level. - * @type {Array} - */ -var bodyWhitelist = []; - -/** - * A default list of properties in the request body that are not allowed to be logged. - * @type {Array} - */ -var bodyBlacklist = []; - -/** - * A default list of properties in the response object that are allowed to be logged. - * These properties will be safely included in the meta of the log. - * @type {Array} - */ -var responseWhitelist = ['statusCode']; - -/** - * A list of request routes that will be skipped instead of being logged. This would be useful if routes for health checks or pings would otherwise pollute - * your log files. - * @type {Array} - */ -var ignoredRoutes = []; - -/** - * A default function to filter the properties of the req object. - * @param req - * @param propName - * @return {*} - */ -var defaultRequestFilter = function (req, propName) { - return _.result(req, propName); -}; - -/** - * A default function to filter the properties of the res object. - * @param res - * @param propName - * @return {*} - */ -var defaultResponseFilter = function (res, propName) { - return _.result(res, propName); -}; - -/** - * A default function to decide whether skip logging of particular request. Doesn't skip anything (i.e. log all requests). - * @return always false - */ -var defaultSkip = function() { - return false; -}; - -function filterObject(originalObj, whiteList, initialFilter) { - var obj = {}; - var fieldsSet = false; - - [].concat(whiteList).forEach(function (propName) { - var value = initialFilter(originalObj, propName); - - if(typeof (value) !== 'undefined') { - _.set(obj, propName, value); - fieldsSet = true; - }; - }); - - return fieldsSet ? obj : undefined; -} - -// -// ### function errorLogger(options) -// #### @options {Object} options to initialize the middleware. -// - - -function errorLogger(options) { - - ensureValidOptions(options); - - options.requestFilter = options.requestFilter || defaultRequestFilter; - options.responseFilter = options.responseFilter || defaultResponseFilter; - options.winstonInstance = options.winstonInstance || (new winston.Logger ({ transports: options.transports })); - - return function (err, req, res, next) { - - // Let winston gather all the error data. - var exceptionMeta = winston.exception.getAllInfo(err); - exceptionMeta.req = filterObject(req, requestWhitelist, options.requestFilter); - var end = res.end; - res.end = function(chunk, encoding) { - res.end = end; - res.end(chunk, encoding); - - exceptionMeta.res = filterObject(res, responseWhitelist, options.responseFilter); - // This is fire and forget, we don't want logging to hold up the request so don't wait for the callback - options.winstonInstance.log('error', 'middlewareError', exceptionMeta); - } - - next(err); - }; -} - -// -// ### function logger(options) -// #### @options {Object} options to initialize the middleware. -// - - -function logger(options) { - - ensureValidOptions(options); - ensureValidLoggerOptions(options); - - options.requestFilter = options.requestFilter || defaultRequestFilter; - options.responseFilter = options.responseFilter || defaultResponseFilter; - options.winstonInstance = options.winstonInstance || (new winston.Logger ({ transports: options.transports })); - options.level = options.level || "info"; - options.statusLevels = options.statusLevels || false; - options.msg = options.msg || "HTTP {{req.method}} {{req.url}}"; - options.colorStatus = options.colorStatus || false; - options.expressFormat = options.expressFormat || false; - options.ignoreRoute = options.ignoreRoute || function () { return false; }; - options.skip = options.skip || defaultSkip; - - // Using mustache style templating - var template = _.template(options.msg, null, { - interpolate: /\{\{(.+?)\}\}/g - }); - - return function (req, res, next) { - var currentUrl = req.originalUrl || req.url; - if (currentUrl && _.contains(ignoredRoutes, currentUrl)) return next(); - - req._startTime = (new Date); - - req._routeWhitelists = { - req: [], - res: [], - body: [] - }; - - req._routeBlacklists = { - body: [] - }; - - // try to log request first - if(options.expressFormat) { - var msg = chalk.grey(req.method + " " + req.url || req.url) - + " " + chalk[statusColor](res.statusCode) - + " " + chalk.grey(res.responseTime+"ms"); - } else { - console.log(req.body); - var msg = template({req: req, res: res}); - } - if (!options.skip(req, res) && !options.ignoreRoute(req, res)) { - var reqMsg = msg + "Request from FE - header: " + JSON.stringify(req.headers) + " body: " + JSON.stringify(req.body); - options.winstonInstance.log(options.level, reqMsg); - } - - // Manage to get information from the response too, just like Connect.logger does: - var end = res.end; - res.end = function(chunk, encoding) { - res.responseTime = (new Date) - req._startTime; - - res.end = end; - res.end(chunk, encoding); - - req.url = req.originalUrl || req.url; - - if (options.statusLevels) { - if (res.statusCode >= 100) { options.level = "info"; } - if (res.statusCode >= 400) { options.level = "warn"; } - if (res.statusCode >= 500) { options.level = "error"; } - }; - - if (options.colorStatus || options.expressFormat) { - // Palette from https://github.com/expressjs/morgan/blob/master/index.js#L205 - var statusColor = 'green'; - if (res.statusCode >= 500) statusColor = 'red'; - else if (res.statusCode >= 400) statusColor = 'yellow'; - else if (res.statusCode >= 300) statusColor = 'cyan'; - var coloredStatusCode = chalk[statusColor](res.statusCode); - } - - var meta = {}; - - if(options.meta !== false) { - var bodyWhitelist, blacklist; - - requestWhitelist = requestWhitelist.concat(req._routeWhitelists.req || []); - responseWhitelist = responseWhitelist.concat(req._routeWhitelists.res || []); - - meta.req = filterObject(req, requestWhitelist, options.requestFilter); - meta.res = filterObject(res, responseWhitelist, options.responseFilter); - - if (_.contains(responseWhitelist, 'body')) { - if (chunk) { - var isJson = (res._headers && res._headers['content-type'] - && res._headers['content-type'].indexOf('json') >= 0); - - meta.res.body = isJson ? JSON.parse(chunk) : chunk.toString(); - res.body = meta.res.body; - } - } - - bodyWhitelist = req._routeWhitelists.body || []; - blacklist = _.union(bodyBlacklist, (req._routeBlacklists.body || [])); - - var filteredBody = null; - - if ( req.body !== undefined ) { - if (blacklist.length > 0 && bodyWhitelist.length === 0) { - var whitelist = _.difference(_.keys(req.body), blacklist); - filteredBody = filterObject(req.body, whitelist, options.requestFilter); - } else { - filteredBody = filterObject(req.body, bodyWhitelist, options.requestFilter); - } - } - - if (filteredBody) meta.req.body = filteredBody; - - meta.responseTime = res.responseTime; - } - - // if(options.expressFormat) { - // var msg = chalk.grey(req.method + " " + req.url || req.url) - // + " " + chalk[statusColor](res.statusCode) - // + " " + chalk.grey(res.responseTime+"ms"); - // } else { - // var msg = template({req: req, res: res}); - // } - // This is fire and forget, we don't want logging to hold up the request so don't wait for the callback - if (!options.skip(req, res) && !options.ignoreRoute(req, res)) { - var resMsg = msg + "Response to FE - header: " + JSON.stringify(res.header()._headers) + " body: " + JSON.stringify(res.body) + ", statusCode: " + res.statusCode + ", responseTime: " + res.responseTime + "ms"; - options.winstonInstance.log(options.level, resMsg); - //options.winstonInstance.log(options.level, msg, JSON.stringify(meta)); - } - }; - - next(); - }; -} - -function ensureValidOptions(options) { - if(!options) throw new Error("options are required by express-winston middleware"); - if(!((options.transports && (options.transports.length > 0)) || options.winstonInstance)) - throw new Error("transports or a winstonInstance are required by express-winston middleware"); -} - -function ensureValidLoggerOptions(options) { - if (options.ignoreRoute && !_.isFunction(options.ignoreRoute)) { - throw new Error("`ignoreRoute` express-winston option should be a function"); - } -} - -module.exports.errorLogger = errorLogger; -module.exports.logger = logger; -module.exports.requestWhitelist = requestWhitelist; -module.exports.bodyWhitelist = bodyWhitelist; -module.exports.bodyBlacklist = bodyBlacklist; -module.exports.responseWhitelist = responseWhitelist; -module.exports.defaultRequestFilter = defaultRequestFilter; -module.exports.defaultResponseFilter = defaultResponseFilter; -module.exports.defaultSkip = defaultSkip; -module.exports.ignoredRoutes = ignoredRoutes; -- libgit2 0.21.2