温斯顿并不适合打印机

JoB*_*324 28 node.js winston

我正试图让Winston打印到控制台,所以我把它放在一个文件中并用节点运行它:

var winston = require('winston');
winston.cli();
winston.data({
  a: "test",
  of: "many",
  properties: {
    like: "this"
  }
});
winston.data('data', {
  a: "test",
  of: "many",
  properties: {
    like: "this"
  }
});
Run Code Online (Sandbox Code Playgroud)

终端吐出以下(不完全相同)的消息:

data:     a=test, of=many, like=this
data:    data a=test, of=many, like=this
Run Code Online (Sandbox Code Playgroud)

我按照Winston自述文件中的说明("在CLI工具中使用winston").我误读了什么吗?在某个地方错过了设置?

JoB*_*324 31

我找到了答案(文档不正确).如果使用构造函数并手动添加传输,则可以为winston和单个传输设置选项.某些选项需要直接添加到winston,而其他选项需要添加到传输中.

例如:

var winston = require('winston');
var logger = new (winston.Logger)({
  levels: {
    trace: 0,
    input: 1,
    verbose: 2,
    prompt: 3,
    debug: 4,
    info: 5,
    data: 6,
    help: 7,
    warn: 8,
    error: 9
  },
  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: 'info',
  silent: false,
  colorize: true,
  timestamp: true,
  filename: './nKindler.log',
  maxsize: 40000,
  maxFiles: 10,
  json: false
});
Run Code Online (Sandbox Code Playgroud)

  • 这个级别的数字不应该是相反的顺序吗?例如,error = 0和trace = 9 https://github.com/winstonjs/winston#logging-levels (8认同)

小智 13

如果您使用的是winston@3.0.0-rc0,那么接受的答案将无效.请尝试以下方法:

const winston = require("winston");
let date = new Date().toISOString();
const logFormat = winston.format.printf(function(info) {
  return `${date}-${info.level}: ${JSON.stringify(info.message, null, 4)}\n`;
});
const logger = winston.createLogger({
  transports: [
    new winston.transports.Console({
      level: level,
      format: winston.format.combine(winston.format.colorize(), logFormat)
    })
  ]
});
Run Code Online (Sandbox Code Playgroud)

日志将具有以下格式:

它的颜色是BTW

2018-03-01T19:49:54.042Z-info: "----- Customer Details ------"

2018-03-01T19:49:54.042Z-info: [
    {
        "A": 1,
        "B": 2
    }
]
Run Code Online (Sandbox Code Playgroud)

  • 这会将日期硬编码为一个值,并且不会在日志消息中记录正确的日期 - 它们都是相同的(如示例中所示)。 (3认同)

chr*_*and 9

这是 Winston v3+ 的解决方案

  let winstonFormat = winston.format.json();
  if (NODE_ENV == "development") {
    winstonFormat = winston.format.combine(winston.format.json(), winston.format.prettyPrint());
  }

  const log = winston.createLogger({
    level: "info",
    format: winstonFormat,
    defaultMeta: {app: "myapp"},
    transports: [
      new winston.transports.File({filename: "/dev/stderr", level: "warn"}),
      new winston.transports.File({filename: "/dev/stdout"}),
    ],
  });
Run Code Online (Sandbox Code Playgroud)