首页 > 解决方案 > 温斯顿 - 无法将控制台消息记录到文件中

问题描述

我想使用 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;

标签: node.jswinston

解决方案


您没有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();

推荐阅读