如何使用Winston v2过滤邮件?

时间:2018-07-02 06:49:14

标签: javascript node.js winston

filters修改message,然后rewrites修改meta。 使用winston v2 ^,如果我想过滤掉(不打印)某些消息,我有什么选择?

1 个答案:

答案 0 :(得分:0)

我知道这个问题要求Winston 2,但也许Winston 3更相关,因为该线程大约有8个月了

对于Winston 2,请阅读https://github.com/winstonjs/winston/blob/2.4.0/docs/transports.md#console-transport并弄清楚,可能需要定义一个formatter,因为这是该版本控制台传输选项中的一个支柱

通过阅读winston的源代码来弄清楚它。似乎依赖于此模块logform。

const logform = require('logform');
// const { MESSAGE } = require('triple-beam'); // prop for info in winston formater to expose the shown message 

function filterMessagesFormat(filterFunc) {
  const formatFunc = (info) => {
    if (filterFunc(info.message)) return info;
    return null;
  };

  const format = logform.format(formatFunc);
  format.transform = formatFunc;

  return format;
}

用法与它们定义的格式相同,例如json,colorize,simple等。

winston.createLogger(options)的选项中,您定义了一个名为transports的prop,并且希望该数组的值之一是此函数的输出,例如:

transports: [
  new winston.transports.Console({
    format: winston.format.combine(
      filterMessagesFormat((msg) => msg !== 'useless message'),
    ),
    handleExceptions: false,
  }),

我的个人记录器创建者功能https://gist.github.com/jtara1/3128cc6ed3dbea6d507b30967ab0e197,其中显示了一项更改,允许使用过滤器功能