Winston: prettyPrintとsimpleは3.0では機能しません

作成日 2018年11月02日  ·  3コメント  ·  ソース: winstonjs/winston

あなたの環境について教えてください:

  • _ winstonバージョン?_

    • [] winston@2

    • [x] winston@3

  • _ node -v出力:_ v10.12.0
  • _オペレーティングシステム?_(Windows、macOS、またはLinux)ウィンドウ
  • _言語?_すべて

何が問題ですか?

prettyPrintが機能しない

  winston.format.combine(
    winston.format.timestamp(),
    winston.format.colorize(),
    winston.format.prettyPrint(),
    winston.format.splat(),
    winston.format.simple(), // removing this gives an even worse output
  )

代わりに何が起こると思いますか?

ウィンストン2から同じ動作をする

その他の情報

winston 2から同じログ動作を取得しようとしていますが、機能しません。 ログはすべてつぶやかれているため、コンソールトランスポートを使用して読み取ることはできません。

image

image

最も参考になるコメント

問題が解決されている間に誰かが回避策を探している場合、私はローカル開発環境に次の形式を使用しています。

import { format } from 'winston';
const {
  colorize,
  combine,
  timestamp,
  errors,
  printf,
  splat,
} = format;

const devFormat = combine(
        format((info) => {
          info.level = info.level.toUpperCase();
          return info;
        })(),
        colorize(),
        timestamp(),
        splat(),
        errors(),
        printf(
          ({
            timestamp,
            level,
            message,
            ...rest
          }) => {
            let restString = JSON.stringify(rest, undefined, 2);
            restString = restString === '{}' ? '' : restString;

            return `[${timestamp}] ${level} - ${message} ${restString}`;
          },
        ),
      );

全てのコメント3件

私も同じ問題を抱えていました。 #1537を見てください。

問題が解決されている間に誰かが回避策を探している場合、私はローカル開発環境に次の形式を使用しています。

import { format } from 'winston';
const {
  colorize,
  combine,
  timestamp,
  errors,
  printf,
  splat,
} = format;

const devFormat = combine(
        format((info) => {
          info.level = info.level.toUpperCase();
          return info;
        })(),
        colorize(),
        timestamp(),
        splat(),
        errors(),
        printf(
          ({
            timestamp,
            level,
            message,
            ...rest
          }) => {
            let restString = JSON.stringify(rest, undefined, 2);
            restString = restString === '{}' ? '' : restString;

            return `[${timestamp}] ${level} - ${message} ${restString}`;
          },
        ),
      );

私にとってはうまく機能しているようです:

これは、モックS3イベントの処理に基づいて意図的にエラーをスローするサンプルコードです。

~/repos/ghe/lambda-logging (master *% u=)> node -r dotenv/config ./src/test-harness.js 
{
  module: 'app.js',
  s3SchemaVersion: '1.0',
  configurationId: '828aa6fc-f7b5-4305-8584-487c791949c1',
  bucket: {
    name: 'lambda-artifacts-deafc19498e3f2df',
    ownerIdentity: { principalId: 'A3I5XTEXAMAI3E' },
    arn: 'arn:aws:s3:::lambda-artifacts-deafc19498e3f2df'
  },
  object: {
    key: 'b21b84d653bb07b05b1e6b33684dc11b',
    size: 1305107,
    eTag: 'b21b84d653bb07b05b1e6b33684dc11b',
    sequencer: '0C0F6F405D6ED209E1'
  },
  level: 'INFO',
  message: 'processing event',
  timestamp: '2020-05-09 20:03:43'
}
{
  level: 'ERROR',
  module: 'index.js',
  timestamp: '2020-05-09 20:03:43',
  message: "Cannot read property '0' of undefined",
  stack: "TypeError: Cannot read property '0' of undefined\n" +
    '    at Object.run (/Users/jason.berk/repos/ghe/lambda-logging/src/app.js:5:26)\n' +
    '    at Object.exports.handler (/Users/jason.berk/repos/ghe/lambda-logging/src/index.js:7:22)\n' +
    '    at Object.<anonymous> (/Users/jason.berk/repos/ghe/lambda-logging/src/test-harness.js:44:9)\n' +
    '    at Module._compile (internal/modules/cjs/loader.js:1158:30)\n' +
    '    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)\n' +
    '    at Module.load (internal/modules/cjs/loader.js:1002:32)\n' +
    '    at Function.Module._load (internal/modules/cjs/loader.js:901:14)\n' +
    '    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)\n' +
    '    at internal/main/run_main_module.js:18:47'
}

私のロガー設定は次のとおりです。

const path = require('path');
const { createLogger, format, transports } = require('winston');
const { combine, errors, timestamp } = format;

const baseFormat = combine(
  timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
  errors({ stack: true }),
  format((info) => {
    info.level = info.level.toUpperCase();
    return info;
  })(),
);

const splunkFormat = combine(
  baseFormat,
  format.json(),
);

const prettyFormat = combine(
  baseFormat,
  format.prettyPrint(),
);

const createCustomLogger = (moduleName) => createLogger({
  level: process.env.LOG_LEVEL,
  format: process.env.PRETTY_LOGS ? prettyFormat : splunkFormat,
  defaultMeta: { module: path.basename(moduleName) },
  transports: [
    new transports.Console(),
  ],
});

module.exports = createCustomLogger;
このページは役に立ちましたか?
0 / 5 - 0 評価