Skip to content

Commit f3135cc

Browse files
committed
[Cluster][Master/Worker][Logger][Scaffolding] Implemented request-access-logger for single worker and cluster. Added GNU makefile for new projects.
1 parent fd9bfbe commit f3135cc

File tree

8 files changed

+96
-24
lines changed

8 files changed

+96
-24
lines changed

lib/app/cluster/master/ipc/logger.js

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,48 @@ var Logger = function(options)
4040
};
4141

4242
// Setup winston logger
43-
this.logger = new winston.Logger(workerLoggerConf);
43+
this.default = new winston.Logger(workerLoggerConf);
44+
45+
var workerRequestLoggerConf = {
46+
transports: [
47+
new (winston.transports.File)({
48+
json: false,
49+
filename: process.cwd() + '/var/log/' + greppy.context + '.access.log'
50+
})
51+
]
52+
};
53+
54+
// Setup winston request logger
55+
this.request = new winston.Logger(workerRequestLoggerConf);
4456
};
4557

4658
/**
4759
* Log an given worker request with userdefined content.
4860
*/
4961
Logger.prototype.log = function(msg, options)
5062
{
51-
options.msg = '[' + new String(msg.reqPid).white + '] ' + options.msg;
63+
if ('undefined' === typeof options.type) {
64+
options.type = 'default';
65+
}
66+
67+
if (!this.hasOwnProperty(options.type)) {
68+
69+
return this.default.log('error',
70+
'Logger "' + options.type + '" is not registered.'
71+
);
72+
}
73+
74+
// Modify the log request for the default logger
75+
if ('default' === options.type) {
76+
77+
options.msg = '[' + new String(msg.reqPid).white + '] ' + options.msg;
5278

53-
if ('debug' !== options.level && 'error' !== options.level) {
54-
options.msg = ' ' + options.msg;
79+
if ('debug' !== options.level && 'error' !== options.level) {
80+
options.msg = ' ' + options.msg;
81+
}
5582
}
5683

57-
this.logger.log(options.level, options.msg, options.meta);
84+
this[options.type].log(options.level, options.msg, options.meta);
5885
}
5986

6087
module.exports = Logger;

lib/app/cluster/worker.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,19 @@ var Worker = function(options, callback)
4141

4242
return part;
4343
},
44-
"level" : 'debug',
45-
"silent" : false
44+
level : 'debug',
45+
silent : false
46+
})
47+
]
48+
},
49+
requestLogger: {
50+
transports: [
51+
new (IPCLogger)({
52+
type : 'request',
53+
worker : this,
54+
colorize : false,
55+
level : 'info',
56+
silent : false
4657
})
4758
]
4859
}

lib/app/cluster/worker/ipc/logger.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ var IPCLogger = winston.transports.IPCLogger = function (options)
1616
this.name = 'IPCLogger';
1717
this.level = options.level || 'info';
1818
this.worker = options.worker;
19+
this.type = options.type || 'default';
1920
};
2021

2122
/**
@@ -33,7 +34,8 @@ IPCLogger.prototype.log = function (level, msg, meta, callback)
3334
this.worker.getIPC().request('logger.log', {
3435
level : level,
3536
msg : msg,
36-
meta : meta
37+
meta : meta,
38+
type : this.type
3739
});
3840

3941
callback(null, true);

lib/app/worker.js

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
* @author Hermann Mayer <hermann.mayer92@gmail.com>
66
*/
77

8-
var cluster = require('cluster');
9-
var winston = require('winston');
10-
var moment = require('moment');
11-
var colors = require('colors');
12-
var extend = require('extend');
13-
var getopt = require('node-getopt');
14-
8+
var cluster = require('cluster');
9+
var winston = require('winston');
10+
var expressWinston = require('express-winston');
11+
var moment = require('moment');
12+
var colors = require('colors');
13+
var extend = require('extend');
14+
var getopt = require('node-getopt');
1515
var ControllerLoader = require('../http/mvc/loader');
1616

1717
/**
@@ -94,15 +94,28 @@ var Worker = function(options)
9494

9595
return part;
9696
},
97-
"level" : 'debug',
98-
"silent" : false
97+
level : 'debug',
98+
silent : false
9999
})
100100
]
101101
};
102102

103-
var loggerConf = extend(true, defaultLoggerConf, this.options.logger || {});
103+
var loggerConf = extend(true, {}, defaultLoggerConf, this.options.logger || {});
104104
this.logger = new winston.Logger(loggerConf);
105105
greppy.logger = global.logger = this.logger;
106+
107+
// Setup winston request logger
108+
var defaultRequestLoggerConf = {
109+
transports: [
110+
new (winston.transports.File)({
111+
json: false,
112+
filename: process.cwd() + '/var/log/' + greppy.context + '.access.log'
113+
})
114+
]
115+
};
116+
117+
var requestLoggerConf = extend(false, {}, defaultRequestLoggerConf, this.options.requestLogger || {});
118+
this.requestLogger = expressWinston.logger(requestLoggerConf);
106119
};
107120

108121
/**
@@ -135,6 +148,9 @@ Worker.prototype.configure = function(app, server, callback)
135148

136149
var setupModules = function()
137150
{
151+
// Push the request logger to the middleware stack
152+
app.use(self.requestLogger);
153+
138154
var listenServer = function() {
139155

140156
// Load all routes into the application
@@ -226,7 +242,7 @@ Worker.prototype.configure = function(app, server, callback)
226242
}
227243

228244
// Configure the app with Greppy enhancements
229-
var defaultApp = new (require('./worker/app'))(self.context);
245+
var defaultApp = new (require('./worker/app'))(self);
230246

231247
defaultApp.configure(self.app, self.server, listenServer);
232248
}

lib/app/worker/app.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ var express = require('express');
1010
/**
1111
* @constructor
1212
*
13-
* @param {Object} context - Worker context
13+
* @param {Object} worker - Worker object
1414
*/
15-
var App = function(context)
15+
var App = function(worker)
1616
{
1717
var self = this;
1818

19-
this.context = context;
19+
this.context = worker.context;
20+
this.worker = worker;
2021
this.controllers = {};
2122

2223
this.context.routes.forEach(function(route) {

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
"node-fs": "~0.1.5",
3636
"async": "~0.2.5",
3737
"winston": "~0.7.2",
38+
"express-winston": "~0.2.1",
3839
"extend": "~1.1.3",
3940
"moment": "~2.2.1",
4041
"memory-cache": "~0.0.5",

templates/project/Makefile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
.PHONY: all clean configure deinstall install
2+
3+
configure:
4+
uninstall:
5+
clean:
6+
# Clean logs
7+
@eval `find ./var/log -type f -name '*.log' | awk '{print "echo \"\033[0;31mremove \033[0m" $$0 "\" && rm " $$0 ";"}'`
8+
9+
install: configure
10+
##### Install backend vendor packages #####
11+
@npm install
12+
13+
##### Install frontend vendor packages #####
14+
@bower install
15+

templates/project/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
"node-uuid" : "~1.4.0",
2222
"validator" : "~1.2.1",
2323
"express-validator" : "~0.3.2",
24-
"winston" : "~0.7.2",
25-
"express-winston" : "~0.2.0"
24+
"winston" : "~0.7.2"
2625
}
2726
}

0 commit comments

Comments
 (0)