Winston is not writing logs to files
10,913
Solution 1
please create one log.js file and write this all code
var winston = require('winston');
const env = process.env.NODE_ENV;
const logDir = 'logs';
const fs = require('fs');
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir);
}
const now = new Date();
var logger = new(winston.Logger)({
transports: [
new winston.transports.File({
name: 'error-file',
filename: './logs/exceptions.log',
level: 'error',
json: false
}),
new(require('winston-daily-rotate-file'))({
filename: `${logDir}/-apimodules.log`,
timestamp: now,
datePattern: 'dd-MM-yyyy',
prepend: true,
json: false,
level: env === 'development' ? 'verbose' : 'info'
})
],
exitOnError: false
});
module.exports = logger;
module.exports.stream = {
write: function(message, encoding) {
logger.info(message);
console.log('message=', message);
}
};
For add log, use this file everywhere that need to log using this code
var logger = require('./path of/log.js');
logger.info('*** Requested for First log... ***');
Solution 2
For modernization, here is the working code for the above answer as the above answer does not work for the latest version of winston 3.2.1. This is the working code for the file log.js
const fs = require('fs');
var winston = require('winston');
const env = process.env.NODE_ENV;
const logDir = 'logs';
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir);
}
const now = new Date();
var logger = winston.createLogger({
transports: [
new winston.transports.File({
name: 'error-file',
filename: './logs/exceptions.log',
level: 'error',
json: false,
}),
new (require('winston-daily-rotate-file'))({
filename: `${logDir}/-apimodules.log`,
timestamp: now,
datePattern: 'dd-MM-yyyy',
prepend: true,
json: false,
level: env === 'development' ? 'verbose' : 'info',
}),
],
exitOnError: false,
});
module.exports = logger;
module.exports.stream = {
write: function (message) {
logger.info(message);
console.log('message = ', message);
},
};
Note that this outputs the data to a root folder named logs.
Related videos on Youtube
Author by
Bargain23
Updated on June 04, 2022Comments
-
Bargain23 almost 2 years
I made two transports for errors and warnings in Winston that supposedly writes to files. The existing transport for console logging works fine, and I did check
pm2 logs
and saw the logs, but the transports for files are not saving anyting.'use strict'; const winston = require('winston'); const m = require('moment-timezone'); let logger = null; /** * Initializes the logger * @param {object} configLogging */ module.exports.initialize = function initialize(configLogging) { const dateFormat = 'dddd, MMMM Do YYYY, h:mm:ss a'; logger = new winston.Logger({ transports: [ new (winston.transports.Console)({ name: 'info-console', level: configLogging.level, colorize: true, timestamp: function() { return m.utc().format(dateFormat); } }), new (winston.transports.File)({ name: 'warning-file', filename: 'warning-file.log', level: 'warning' }), new (winston.transports.File)({ name: 'error-file', filename: 'error-file.log', level: 'error' }) ] }); logger.info('Starting logging service'); }; /** * Gets the logger instance * @returns {LoggerInstance} winLogger */ module.exports.get = function get() { return logger; };
-
mandar.gokhale over 6 yearsI will suggest to manually create error-file.log & warning-file.log file with write permission to test Winston logging. If it works then it's not Winston issue, provide proper read/write/execute access to the directory in which your app is present for the current user.
-
-
Eksapsy almost 6 yearsWhile your solution works, you don't explain why it works. :/ It would be more than useful to know.
-
Aditya Mittal almost 6 yearsvar logger = winston.createLogger({ instead of var logger = new(winston.Logger)({
-
Dhruvin modi over 4 yearsI am facing the same problem. so i change my code according to your solution but getting error as explained. when I use new(winston.Logger) it gives me error that
TypeError: winston.Logger is not a constructor
.