I\'m trying to set up an access log and an error log for my express server using Winston, but I seem to be doing something wrong.
Here is my attempt at a config file:
I'd try something like this, put all the logger related stuff into a module logger.js:
logger.js
var winston = require('winston');
var path = require('path');
// Set this to whatever, by default the path of the script.
var logPath = __dirname;
const tsFormat = () => (new Date().toISOString());
const errorLog = winston.createLogger({
transports: [
new winston.transports.File({
filename: path.join(logPath, 'errors.log'),
timestamp: tsFormat,
level: 'info'
})
]
});
const accessLog = winston.createLogger({
transports: [
new winston.transports.File({
filename: path.join(logPath, 'access.log'),
timestamp: tsFormat,
level: 'info'
})
]
});
module.exports = {
errorLog: errorLog,
accessLog: accessLog
};
and then test in index.js:
index.js
var logger = require('./logger');
logger.errorLog.info('Test error log');
logger.accessLog.info('Test access log');
You should see log lines like:
errors.log:
{"level":"info","message":"Test access log","timestamp":"2018-03-14T07:51:11.185Z"}
access.log:
{"level":"info","message":"Test error log","timestamp":"2018-03-14T07:51:11.182Z"}
EDIT
On Winston version 3.x.x,
new (winston.Logger)
has been replaced bywinston.createLogger
(https://github.com/bithavoc/express-winston/issues/175)
Since you were creating the winston
variable in the original code as const winston
it wasn't able to add transports and other options in the following lines. The proposed solution moves the similar code into a module but assigns winston
variable into var winston
.
1 Logger + console logging for development purpose:
logger.js
var logPath = '';
var log_level = '';
const log = winston.createLogger({
level: log_level,
format: winston.format.json(),
transports: [
new winston.transports.File({
filename: path.join(logPath, 'access.log'),
timestamp: tsFormat,
level: log_level
}),
new winston.transports.File({
filename: path.join(logPath, 'error.log'),
timestamp: tsFormat,
level: 'error'
}),
]
});
if (process.env.NODE_ENV !== 'production') {
log.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
module.exports = {
log: log
};
app.js
const logger = require('./logger');
logger.log.info("starting application..");