Winston 没有将日志写入文件
Winston is not writing logs to files
我在 Winston 中针对错误和警告进行了两次传输,这些错误和警告应该写入文件。现有的控制台日志记录传输工作正常,我确实检查了 pm2 logs
并看到了日志,但是文件传输没有保存任何内容。
'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;
};
请创建一个log.js文件并写入所有代码
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);
}
};
对于添加日志,在任何需要使用此代码进行日志记录的地方都使用此文件
var logger = require('./path of/log.js');
logger.info('*** Requested for First log... ***');
对于现代化,这里是上述答案的工作代码,因为上述答案不适用于最新版本的 winston 3.2.1。这是文件 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);
},
};
请注意,这会将数据输出到名为 logs 的根文件夹中。
我在 Winston 中针对错误和警告进行了两次传输,这些错误和警告应该写入文件。现有的控制台日志记录传输工作正常,我确实检查了 pm2 logs
并看到了日志,但是文件传输没有保存任何内容。
'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;
};
请创建一个log.js文件并写入所有代码
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);
}
};
对于添加日志,在任何需要使用此代码进行日志记录的地方都使用此文件
var logger = require('./path of/log.js');
logger.info('*** Requested for First log... ***');
对于现代化,这里是上述答案的工作代码,因为上述答案不适用于最新版本的 winston 3.2.1。这是文件 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);
},
};
请注意,这会将数据输出到名为 logs 的根文件夹中。