Winston: prettyPrint et simple ne fonctionnent pas dans 3.0

Créé le 2 nov. 2018  ·  3Commentaires  ·  Source: winstonjs/winston

Veuillez nous parler de votre environnement :

  • _ Version winston ?_

    • [ ] winston@2

    • [x] winston@3

  • _ node -v sorties :_ v10.12.0
  • Fenêtres _Système d'exploitation ?_ (Windows, macOS ou Linux)
  • _Langue ?_ tout

Quel est le problème?

joliPrint ne fonctionne pas

  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
  )

Qu'attendez-vous qu'il se passe à la place ?

Avoir le même comportement de winston 2

Les autres informations

Essayer d'obtenir le même comportement de journal de winston 2, mais cela ne fonctionne pas. le journal est tout marmonné, ce qui le rend impossible à lire à l'aide du transport de la console.

image

image

Commentaire le plus utile

Si quelqu'un cherche une solution de contournement pendant que le problème est résolu, j'utilise le format suivant pour l'environnement de développement local :

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}`;
          },
        ),
      );

Tous les 3 commentaires

J'ai eu le même problème. Jetez un œil au #1537.

Si quelqu'un cherche une solution de contournement pendant que le problème est résolu, j'utilise le format suivant pour l'environnement de développement local :

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}`;
          },
        ),
      );

ça a l'air de bien fonctionner chez moi :

voici un exemple de code qui génère une erreur intentionnellement basée sur le traitement d'un événement S3 fictif

~/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'
}

ma configuration d'enregistreur est :

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;
Cette page vous a été utile?
0 / 5 - 0 notes