node.js - 温斯顿 - 无法将控制台消息记录到文件中
问题描述
我想使用 Winston 记录来自控制台的所有消息,
并用于winston-daily-rotate-file
日常存储和删除日志。
在控制台中:
{"level":"info","message":"Feathers application started on localhost","timestamp":"5/26/2021, 10:44:36 AM"}
You will see this message every 60 second
You will see this message every 60 second
You will see this message every 60 second
当我查看日志文件application-2021-05-26.log
时,
{"level":"info","message":"Feathers application started on localhost","timestamp":"5/26/2021, 10:44:36 AM"}
You will see this message every 60 second
日志文件中缺少。
这里有什么问题?
应用程序.js
var CronJob = require('cron').CronJob;
const moment = require('moment');
new CronJob('10 * * * * *', function() {
console.log('You will see this message every 60 second');
}, null, true, 'Asia/Singapore');
logger.js
const { createLogger, format, transports } = require('winston');
const winston = require('winston');
require('winston-daily-rotate-file');
const timezoned = () => {
return new Date().toLocaleString('en-SG', {
timeZone: 'Asia/Singapore'
});
}
const logger = createLogger({
level: 'debug',
format: format.combine(
format.splat(),
format.simple(),
format.json()
),
transports: [
new transports.Console(),
new winston.transports.DailyRotateFile({
filename: 'application-%DATE%.log',
dirname: "logs",
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '2d',
format: winston.format.combine(
winston.format.timestamp({ format: timezoned }),
winston.format.json(),
),
})
],
});
module.exports = logger;
解决方案
您没有logger.log
在定义中使用该函数CronJob
。
请查看此最小可行示例,了解如何配置代码库以查看控制台和文件中的日志。
当您运行示例时(使用node index.js
),脚本将向控制台发出日志,并在项目的根目录中生成一个本地文件。
这是整个脚本供参考:
const { CronJob } = require('cron');
const { createLogger, format, transports } = require('winston');
const moment = require('moment');
require('winston-daily-rotate-file');
const timezoned = () =>
new Date().toLocaleDateString('en-SG', {
timeZone: 'Asia/Singapore'
});
const logger = createLogger({
level: 'debug',
format: format.combine(format.splat(), format.simple(), format.json()),
transports: [
new transports.Console(),
new transports.DailyRotateFile({
filename: 'application-%DATE%.log',
dirname: '.',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '2d',
format: format.combine(
format.timestamp({ format: timezoned }),
format.json()
)
})
]
});
const job = new CronJob(
'10 * * * * *',
() => logger.debug("You'll see this message every 60 seconds"),
null,
null,
'Asia/Singapore'
);
job.start();
推荐阅读
- rust - 可以为 Rust 中的元组定义 Ord 吗?
- command-prompt - 空桌面文件夹?
- android - Flutter Blue Read 特性返回错误
- angular - 服务继续运行,但按钮状态发生变化
- python - 如何在 django 后端访问 html 元素 ID?
- javascript - 使用主窗口中的预连接资源提示来提高外部 iframe 中脚本的性能
- python - 为什么相关的 create() 使用 Django ORM 检查 id?
- arrays - 将元素推送到存储在 Julia 中的 jld2 文件中的数组中
- variables - Maximo:MAXVARS 的目的是什么?
- c++ - 为什么当我使用“for循环”时会显示队列的内容,而当我使用“while循环”时却没有?