【问题标题】:How to specify rotated file location by using rotating-file-stream如何使用旋转文件流指定旋转文件位置
【发布时间】:2020-08-22 07:00:48
【问题描述】:

我编写了如下代码来记录快速日志。

const rfs = require("rotating-file-stream");

function formatDate() {
  var d = new Date(),
    month = '' + (d.getMonth() + 1),
    day = '' + d.getDate(),
    year = d.getFullYear();
    hour = d.getHours();

  if (month.length < 2)
    month = '0' + month;
  if (day.length < 2)
    day = '0' + day;
  if (hour.length < 2)
    hour = '0' + hour

  return [year, month, day, hour].join('-');
}

let log_directory = '/../logs/';

let log_date = formatDate()
let log_file_name =  path.normalize(__dirname + log_directory + log_date, 'access.log');

let accessLogStream = rfs.createStream(log_file_name, {
  size: "300M",
  interval: "1d",
})

app.use(morgan(':date[iso] :method :url :body :headers :remote-addr :req[content-length] - :status :response-time ms - :res[content-length] ', { stream: accessLogStream }));

日志按预期存储在项目之外。

但经过轮换后,日志以以下文件夹名称存储在项目中

20200507-0943-01-     
20200508-0943-01-      
20200509-0943-01-     
20200510-0943-01-      
20200511-0943-01-      
20200512-0943-01-      
20200513-0944-01-   
package.json
package-lock.json
public
routes
scripts
services
app.js

我不希望在项目中创建这些文件夹。有什么办法可以处理吗?

【问题讨论】:

    标签: node.js logging morgan


    【解决方案1】:

    首先,您使用静态文件名作为createStream 函数的filename 参数,并且您正在对日期进行一些计算以获得生成的文件名。

    请注意,在调用createStream 函数之前,日期的计算只发生一次。为了计算每次旋转时发生的日期,您应该使用文件名生成器函数。详情请见readme

    不仅如此,这一行似乎还有一个错误:path.normalize 只接受一个参数。

    let log_file_name =  path.normalize(__dirname + log_directory + log_date, 'access.log');
    

    最后,要指定日志记录的目录,path 选项就足够了。

    如果我正确地论证了你的意图,下面的代码应该可以解决所有问题

    const rfs = require("rotating-file-stream");
    
    function formatDate(d) {
      var month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear(),
        hour = d.getHours();
    
      if (month.length < 2)
        month = '0' + month;
      if (day.length < 2)
        day = '0' + day;
      if (hour.length < 2)
        hour = '0' + hour;
    
      return [year, month, day, hour].join('-');
    }
    
    function log_file_name(time, index) {
      if (!time) return 'access.log';
    
      return [formatDate(time), index, 'access.log'].join('-');
    }
    
    let accessLogStream = rfs.createStream(log_file_name, {
      size: "300M",
      interval: "1d",
      path: '/../logs/'
    });
    

    【讨论】:

      猜你喜欢
      • 2019-03-27
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      相关资源
      最近更新 更多