【问题标题】:How to seperate logs into separate files daily in Node.js using Winston library如何使用 Winston 库在 Node.js 中每天将日志分隔到单独的文件中
【发布时间】:2019-10-18 05:20:24
【问题描述】:

我有一个 node.js 应用程序。我需要在这个程序中记录每个事件,为此我使用 winston 库。我正在尝试为每天创建一个日志文件。所有的日志都应该每天分开。我想将日常文件保存在我的桌面上。例如,我今天所做的请求(我的程序中的操作)将在我的桌面上保存为 18/10/2019.log。明天当我再次执行一些请求(例如:获取、发布)时,应该再次在桌面上记录为 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,
});

【问题讨论】:

标签: javascript node.js express logging winston


【解决方案1】:

安装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 以根据您的要求进行配置。

【讨论】:

  • 错误:没有这样的文件或目录,mkdir '21/10\'
  • @MinelAydın 您需要日期格式为 DD/MM/YYYY 吗?可以是 DD-MM-YYYY,因为如果我这样做,那么它工作正常。我认为 / 被 winston-daily-rotate-file 库视为目录。
【解决方案2】:

试试这个:

将 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' })
  ]
});

【讨论】:

  • 谢谢,但我试过了,但是这段代码把我的日志文件保存在哪里?
  • 让 errorLogFileName = 'logs/ '+new Date().toLocaleDateString()+'error.log';它将在“logs”文件夹下创建文件。
【解决方案3】:
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;

把这个单独的文件放到项目文件中

【讨论】:

    【解决方案4】:

    您可以使用 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` })
        ]
      });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-31
      • 2021-07-09
      • 2016-12-15
      • 2019-01-03
      • 1970-01-01
      • 2019-08-28
      • 2013-03-10
      • 2012-05-03
      相关资源
      最近更新 更多