温斯顿只写一个传输

时间:2016-06-13 16:15:20

标签: node.js logging winston

我正在使用自定义winston记录器同时写入控制台和文件,具体取决于日志记录级别(即控制台的任何内容,但只包含对文件的错误和警告)。出于某种原因写入控制台工作,而没有任何内容写入文件,即使我调用错误。

最初我搞砸了级别的顺序,从trace = 0开始上升到error = 9.虽然我有设置winston写入文件而不是控制台。我假设winston只写一个传输然后停止?

我的配置是这样的:

import winston from 'winston';

const logger = new (winston.Logger)({
  levels: {
    trace: 9,
    input: 8,
    verbose: 7,
    prompt: 6,
    debug: 5,
    info: 4,
    data: 3,
    help: 2,
    warn: 1,
    error: 0,
  },
  colors: {
    trace: 'magenta',
    input: 'grey',
    verbose: 'cyan',
    prompt: 'grey',
    debug: 'blue',
    info: 'green',
    data: 'grey',
    help: 'cyan',
    warn: 'yellow',
    error: 'red',
  },
});

logger.add(winston.transports.Console, {
  level: 'trace',
  prettyPrint: true,
  colorize: true,
  silent: false,
  timestamp: false,
});

logger.add(winston.transports.File, {
  prettyPrint: false,
  level: 'error',
  silent: false,
  colorize: true,
  timestamp: true,
  filename: `${__dirname}/../logs/error.log`,
  maxsize: 40000,
  maxFiles: 10,
  json: false,
});

1 个答案:

答案 0 :(得分:0)

似乎我必须给每个运输一个名字。即。

logger.add(winston.transports.Console, {
  name: 'trace-console',
  // ...
});

logger.add(winston.transports.File, {
  name: 'error-file',
  // ...
});

现在它似乎按预期工作了。

编辑:出于某种原因,两者都必须将colorize选项设置为true(?)。