首页 > 解决方案 > Winston Logger:路径必须是字符串

问题描述

我在我的 Node.js 项目中使用 Winston 进行日志记录。我想构建几个具有类似设置的记录器,所以为了干燥,我正在尝试使用一个函数构建传输:

function makeTransport(dir, logLevel) {
  return new winston.transports.DailyRotateFile({
    filename: `${LOG_DIR}/${dir}/${logLevel}-%DATE%.log`,
    datePattern: 'YYYY-MM-DD-HH',
    level: logLevel,
    format: myFormat
  });
}

但是当我运行它时,它会抛出一个错误

TypeError: Path must be a string. Received undefined

我检查了我所有的语法。错误肯定与传输构造函数有关。有没有一种方法可以做我想做的事情,而无需在我的代码中复制粘贴记录器定义?

标签: node.jsloggingtypeerrorwinston

解决方案


更新:我找到了一个可行的解决方法

function makeTransport(dir, logLevel) {
  let def = {
    filename: `${LOG_DIR}/${dir}/${logLevel}-%DATE%.log`,
    datePattern: 'YYYY-MM-DD-HH',
    level: logLevel,
    format: myFormat
  };
  return new winston.transports.DailyRotateFile(def);
}

我仍然不确定为什么原始方式不起作用,但这大约是相同数量的代码。


推荐阅读