Skip to content

Instantly share code, notes, and snippets.

@xizhibei
Created January 29, 2016 07:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xizhibei/183cf2bebdea4eb40b48 to your computer and use it in GitHub Desktop.
Save xizhibei/183cf2bebdea4eb40b48 to your computer and use it in GitHub Desktop.
import mkdirp from 'mkdirp';
import winston from 'winston';
import nconf from 'nconf';
import moment from 'moment';
//import 'winston-logstash';
//import {Mail} from 'winston-mail';
const logDir = nconf.get('logDir');
mkdirp.sync(logDir);
const logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({
colorize: true,
timestamp() {
return moment().format();
},
}),
new (winston.transports.File)({
name: 'out-file',
filename: logDir + 'normal-out.log',
}),
new (winston.transports.File)({
name: 'error-file',
filename: logDir + 'normal-error.log',
level: 'error',
}),
new (winston.transports.DailyRotateFile)({
filename: 'normal-daily.log',
dirname: logDir,
}),
//new (winston.transports.Mail)({}),
//new (winston.transports.Logstash)({
// port: 28777,
// node_name: 'my node name',
// host: '127.0.0.1'
//}),
]
});
const aLogger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({
colorize: true,
timestamp() {
return moment().format();
},
}),
new (winston.transports.File)({
name: 'out-file',
filename: logDir + 'access-out.log',
}),
new (winston.transports.File)({
name: 'error-file',
filename: logDir + 'access-error.log',
level: 'error',
}),
new (winston.transports.DailyRotateFile)({
filename: 'access-daily.log',
dirname: 'logs',
}),
]
});
export function accessLogger() {
return function *(next) {
const request = this.request;
const res = this.res;
const response = this.response;
request._startTime = new Date();
function logRequest() {
res.removeListener('finish', logRequest);
res.removeListener('close', logRequest);
let logData = {
message: response.message,
method: request.method,
hostname: request.hostname,
url: request.originalUrl || request.url,
protocol: request.protocol,
responseTime: `${new Date() - request._startTime} ms`,
status: response.status,
remoteAddress: request.ip,
body: request.body || {},
query: request.query || {},
ua: request.headers['user-agent'] || '',
referrer: request.headers.referrer || '',
user: request.user && request.user._id || '',
};
if (logData.status >= 400) {
logData.responseData = response.body || '';
aLogger.error(logData);
} else {
aLogger.info(logData);
}
}
res.on('finish', logRequest);
res.on('close', logRequest);
yield next;
};
}
export default logger;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment