如何使用 Winston 库在 Node.js 中每天将日志分离到单独的文件中
How to seperate logs into separate files daily in Node.js using Winston library
我有一个 node.js 应用程序。我需要在此程序中记录每个事件,为此我使用了 winston 库。我正在尝试为每一天创建一个日志文件。所有日志应按天分开。我想将日常文件保存在我的桌面上。例如,我今天完成的请求(我程序中的操作)将在我的桌面上保存为 18/10/2019.log。明天当我再次执行一些请求时(例如:get,post)应该再次在桌面上记录为 19/10/2019.log。我不能这样做。有什么建议吗?
编辑:已解决!!
用winston-daily-rotate-file解决了。要使用该模块:
npm install winston-daily-rotate-file
代码:
require('winston-daily-rotate-file');
const logDir= 'C://Users/Desktop/LogFiles';
var options = {
file: {
level:'info',
filename: path.resolve(`${logDir}/${new
Date().getFullYear().toString()} - ${new Date().getMonth()+1}/%DATE%.log`),
datePattern: 'YYYY-MM-DD',
timestamp: new Date()
};
let logger = winston.createLogger({
level:'info',
format: winston.format.combine(
winston.format.printf(info => { return `${info.timestamp} ||
${info.level} || Message: ${info.message}`; })
),
transports: [
new winston.transports.DailyRotateFile(options.file)
],
exitOnError: false,
});
试试这个:
将 errorLogFileName 更改为适合您的日期格式。日志将在同一天附加到同一文件。
如果日期更改,将创建新文件。
**let errorLogFileName = new Date().toLocaleDateString()+'error.log';**
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
defaultMeta: { service: 'user-service' },
transports: [
new winston.transports.File({ filename: errorLogFileName, level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
var winston = require('winston');
function getLogger(module) {
var path = module.filename.split('/').slice(-2).join('/');
return winston.createLogger({
transports: [
new winston.transports.Console({
colorize: true,
level: 'debug',
label: path
})
]
});
}
module.exports = getLogger;
将这个单独的文件放在项目文件中
安装 winston daily rotate
npm install winston-daily-rotate-file
注意:先检查兼容性here
var winston = require('winston');
require('winston-daily-rotate-file');
var fileRotateTransport = new (winston.transports.DailyRotateFile)({
filename: '%DATE%.log',
datePattern: 'DD/MM/YYYY',
maxSize: '20m'
});
var logger = winston.createLogger({
transports: [
fileRotateTransport
]
});
查看 winston daily rotate options 以根据您的要求进行配置。
您可以使用 Date() 手动创建每个文件夹
示例:3052021(2021 年 5 月 30 日)
let errorLogFolderName = new Date().toLocaleDateString().replace(/\D/g, ''); //creating folders each day
function logger() {
return createLogger({
//level: 'info',
format: combine(
timestamp(),
errors({ stack: true }),
printf(info => {
return `${info.timestamp} [${info.level}] : ${(info.stack || info.message)}`;
})
),
transports: [
new transports.File({ filename: `./logs/${errorLogFolderName}/dailylog.log` })
]
});
}
我有一个 node.js 应用程序。我需要在此程序中记录每个事件,为此我使用了 winston 库。我正在尝试为每一天创建一个日志文件。所有日志应按天分开。我想将日常文件保存在我的桌面上。例如,我今天完成的请求(我程序中的操作)将在我的桌面上保存为 18/10/2019.log。明天当我再次执行一些请求时(例如:get,post)应该再次在桌面上记录为 19/10/2019.log。我不能这样做。有什么建议吗?
编辑:已解决!!
用winston-daily-rotate-file解决了。要使用该模块:
npm install winston-daily-rotate-file
代码:
require('winston-daily-rotate-file');
const logDir= 'C://Users/Desktop/LogFiles';
var options = {
file: {
level:'info',
filename: path.resolve(`${logDir}/${new
Date().getFullYear().toString()} - ${new Date().getMonth()+1}/%DATE%.log`),
datePattern: 'YYYY-MM-DD',
timestamp: new Date()
};
let logger = winston.createLogger({
level:'info',
format: winston.format.combine(
winston.format.printf(info => { return `${info.timestamp} ||
${info.level} || Message: ${info.message}`; })
),
transports: [
new winston.transports.DailyRotateFile(options.file)
],
exitOnError: false,
});
试试这个:
将 errorLogFileName 更改为适合您的日期格式。日志将在同一天附加到同一文件。 如果日期更改,将创建新文件。
**let errorLogFileName = new Date().toLocaleDateString()+'error.log';**
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
defaultMeta: { service: 'user-service' },
transports: [
new winston.transports.File({ filename: errorLogFileName, level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
var winston = require('winston');
function getLogger(module) {
var path = module.filename.split('/').slice(-2).join('/');
return winston.createLogger({
transports: [
new winston.transports.Console({
colorize: true,
level: 'debug',
label: path
})
]
});
}
module.exports = getLogger;
将这个单独的文件放在项目文件中
安装 winston daily rotate
npm install winston-daily-rotate-file
注意:先检查兼容性here
var winston = require('winston');
require('winston-daily-rotate-file');
var fileRotateTransport = new (winston.transports.DailyRotateFile)({
filename: '%DATE%.log',
datePattern: 'DD/MM/YYYY',
maxSize: '20m'
});
var logger = winston.createLogger({
transports: [
fileRotateTransport
]
});
查看 winston daily rotate options 以根据您的要求进行配置。
您可以使用 Date() 手动创建每个文件夹
示例:3052021(2021 年 5 月 30 日)
let errorLogFolderName = new Date().toLocaleDateString().replace(/\D/g, ''); //creating folders each day
function logger() {
return createLogger({
//level: 'info',
format: combine(
timestamp(),
errors({ stack: true }),
printf(info => {
return `${info.timestamp} [${info.level}] : ${(info.stack || info.message)}`;
})
),
transports: [
new transports.File({ filename: `./logs/${errorLogFolderName}/dailylog.log` })
]
});
}