簡體   English   中英

如何使用 Winston 庫在 Node.js 中每天將日志分成單獨的文件

[英]How to seperate logs into separate files daily in Node.js using Winston library

我有一個 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,
});

安裝winston daily rotate

npm install winston-daily-rotate-file

注意:首先在這里檢查兼容性

 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 每日 輪換選項以根據您的要求進行配置。

嘗試這個:

將 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;

把這個單獨的文件放在項目文件中

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM