web-dev-qa-db-ja.com

ウィンストンはコンソールにきれいに印刷しません

私は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"
  }
});

端末は、次の(正確ではない)メッセージを吐き出します。

data:     a=test, of=many, like=this
data:    data a=test, of=many, like=this

Winston Readme (「CLIツールでwinstonを使用する」)の指示に従っています。私は何かを誤解していますか?どこかに設定がありませんか?

27
JoBu1324

答えを見つけました(ドキュメントが間違っています)。コンストラクターを使用し、トランスポートを手動で追加する場合、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
});
30
JoBu1324

[email protected]を使用している場合、受け入れられた回答は機能しません。以下を試してください:

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)
    })
  ]
});

ログの形式は次のとおりです。

BTWの色

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

2018-03-01T19:49:54.042Z-info: [
    {
        "A": 1,
        "B": 2
    }
]
13
Sam Gh

これが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"}),
    ],
  });
4
chrishiestand

@partycoderの回答を取り上げて、ウィンストンに付属するデフォルトのログレベルのみを使用するように調整しました。また、エラーの順序を逆にすることもありません。 0 =最高の優先度。

winston.addColors({
  silly: 'Magenta',
  debug: 'blue',
  verbose: 'cyan',
  info: 'green',
  warn: 'yellow',
  error: 'red'
});

winston.remove(winston.transports.Console);
winston.add(winston.transports.Console, {
  level: process.env.LOG_LEVEL,
  prettyPrint: true,
  colorize: true,
  silent: false,
  timestamp: false
});
2
timetofly