微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

winston - 无法将控制台消息记录到文件中

如何解决winston - 无法将控制台消息记录到文件中

我想使用 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",10:44:36 AM"}

You will see this message every 60 second 在日志文件中丢失。
这里有什么问题吗?

app.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;

解决方法

您应该使用 winston logger 打印 app.js 中的日志

var CronJob = require('cron').CronJob;
const moment = require('moment');
const logger = require('./logger.js'); // check the path

new CronJob('10 * * * * *',function() {
  // console.log('You will see this message every 60 second'); -> log on console
  logger.log('info','You will see this message every 60 second');
},null,true,'Asia/Singapore');

签出温斯顿文档 here

,

您没有在 logger.log 定义中使用 CronJob 函数。

请查看此 Minimum Viable Example 以了解应如何配置代码库以查看控制台和文件上的日志。

当您运行示例时(使用 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"),'Asia/Singapore'
);

job.start();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。