I can init a winston with a parameter, in your case filename. I use similar setup for logging separated cron tasks (I use type
parameter instead filename
, which is used as a prefix in log, so I can identify problems in multiple cron tasks in one log file). I hope you are familiar with ES6 syntax.
utils/winston.js
const { createLogger, transports } = require('winston');
const infoLogger = filename => createLogger({
transports: [
new transports.File({
filename: 'info-' + filename,
level: 'info'
}),
new transports.Console(),
],
exitOnError: false
});
const errorLogger = filename => createLogger({
transports: [
new transports.File({
filename: 'error-' + filename,
level: 'error'
}),
new transports.Console(),
],
exitOnError: false
});
export default filename => ({
errorLogger: errorLogger(filename).error,
infoLogger: infoLogger(filename).info
});
So in a your code you can import custom winston setup from utils and initialize it with a filename. Be careful, I basically export only error function from winston errorLogger(filename).error
, You can modify it in way acceptable for you
main.js
import logger from './utils/winston';
const { errorLogger, infoLogger } = logger('http.log');
errorLogger('some http fail'); // destination file => error-http.log
infoLogger('some http info'); // destination file => info-http.log