Winston: Die Konsolenprotokollierung ist nicht eingefärbt.

Erstellt am 10. Nov. 2017  ·  22Kommentare  ·  Quelle: winstonjs/winston

Ich versuche, die Konsolenausgabe einzufärben, und es funktioniert nicht. Die Ausgabe hat alle die gleiche (weiße) Farbe. Ich bin auf 3.0.0-rc1.

const winston = require('winston');
const logLevels = {
  levels: {
    error: 0,
    warn: 1,
    info: 2,
    http: 3,
    sql: 4,
    debug: 5
  },
  colors: {
    error: "red",
    warn: "darkred",
    info: "black",
    http: "green",
    sql: "blue",
    debug: "gray"
  }
};
winston.addColors(logLevels);
const logger = winston.createLogger({...});
logger.add(new winston.transports.Console({colorize: true}));

Ich habe auch den Vorschlag hier versucht, aber das funktioniert auch nicht:

logger.add(new winston.transports.Console({format: winston.format.combine(formatter, winston.format.colorize())}));

Danke,
Alvaro

Hilfreichster Kommentar

Ich konnte es mithilfe der Dokumentation für logform teilweise zum Laufen bringen.

  const alignedWithColorsAndTime = winston.format.combine(
    winston.format.colorize(),
    winston.format.timestamp(),
    winston.format.align(),
    winston.format.printf(info => `${info.timestamp} [${info.level}]: ${info.message}`),
  );

Nicht sicher, wie man mit dem Dumping der JSON-Argumente umgeht.

Update hier ist, was ich ausgearbeitet habe:

  const alignedWithColorsAndTime = winston.format.combine(
    winston.format.colorize(),
    winston.format.timestamp(),
    winston.format.align(),
    winston.format.printf((info) => {
      const {
        timestamp, level, message, ...args
      } = info;

      const ts = timestamp.slice(0, 19).replace('T', ' ');
      return `${ts} [${level}]: ${message} ${Object.keys(args).length ? JSON.stringify(args, null, 2) : ''}`;
    }),
  );

screen shot 2017-11-13 at 10 55 05 am

Alle 22 Kommentare

Ich konnte es mithilfe der Dokumentation für logform teilweise zum Laufen bringen.

  const alignedWithColorsAndTime = winston.format.combine(
    winston.format.colorize(),
    winston.format.timestamp(),
    winston.format.align(),
    winston.format.printf(info => `${info.timestamp} [${info.level}]: ${info.message}`),
  );

Nicht sicher, wie man mit dem Dumping der JSON-Argumente umgeht.

Update hier ist, was ich ausgearbeitet habe:

  const alignedWithColorsAndTime = winston.format.combine(
    winston.format.colorize(),
    winston.format.timestamp(),
    winston.format.align(),
    winston.format.printf((info) => {
      const {
        timestamp, level, message, ...args
      } = info;

      const ts = timestamp.slice(0, 19).replace('T', ' ');
      return `${ts} [${level}]: ${message} ${Object.keys(args).length ? JSON.stringify(args, null, 2) : ''}`;
    }),
  );

screen shot 2017-11-13 at 10 55 05 am

Nach zwei Stunden habe ich es geschafft, die Farben zum Laufen zu bringen, danke @Xeoncross !

Winston gestartet und auch Konsole ohne Farben bekommen ...
Ich habe den nächsten transportdefinierenden Code verwendet:

new winston.transports.Console({
  format: winston.format.simple()
})

Nachdem ich diesen Thread gelesen hatte, ging ich so vor:

new winston.transports.Console({
  format: winston.format.combine(
            winston.format.simple(),
            winston.format.colorize()
          )
})

und habe keinen unterschied.
Also habe ich die Position des Kolorierungsformats auf 1 geändert und die Farben funktionieren

new winston.transports.Console({
  format: winston.format.combine(
            winston.format.colorize(),
            winston.format.simple()
          )
})

Danke @abrakadobr ! Das hat funktioniert.

Nichts hier hat bei mir funktioniert, immer noch keine Farben, und das Verschieben der Farbe nach oben führte dazu, dass das Infofeld codierte Zeichenfolgen protokollierte

Ich habe ein Gist erstellt, das zeigt, wie man die Winston & Morgan-Protokollierung in einer einfachen Expressjs-App verwendet.

Danke @Xeoncross! Das Hinzufügen von winston.format.colorize() zu meinem Format hat funktioniert. Interessant, dass das nicht in der Dokumentation steht. Oder zumindest konnte ich es nicht in den Dokumenten finden.

Ich liebe die neue Flexibilität, aber ich hoffe, es wird eine bessere Dokumentation. Ich habe einfach zu lange damit verbracht, dies zum Laufen zu bringen. Ein Plug-n-Play-Beispiel für diejenigen von uns, die winston.cli() verwendet haben, würde viel bewirken, ähnlich wie das Beispiel von @Xeoncross.

Weiß jemand, wie das mit der aktuellen Release-Version geht? Eine Release Candidate-Version ist keine Option.

Beim Lesen des Codes können Sie als Option auch all an colorize senden, um das gesamte Protokoll einzufärben.

colorize({ all: true })

@markhealey Ich habe die Winston-Abhängigkeit bereits aus meiner package.json entfernt und dann Ihre Nachricht gelesen. Danke :+1:

Danke @Xeoncross. Schauen Sie sich Folgendes an: https://github.com/winstonjs/logform/blob/master/timestamp.js . Sie können den Zeitstempel mit format opt param formatieren. Aber seien Sie vorsichtig mit der Zeitzone

format.combine(
    format.colorize(),
    format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    format.align(),
    format.printf(info => {
        const { timestamp, level, message, ...extra } = info;

        return `${timestamp} [${level}]: ${message} ${
            Object.keys(extra).length ? JSON.stringify(extra, null, 2) : ''
        }`;
    }),
)

format.colorize({all:true} funktioniert nicht wirklich, wenn der Zeitstempel enthalten ist, hier ist ein funktionierendes Beispiel, um die gesamte Zeile einzufärben:

const colorizer = winston.format.colorize();

const logger = winston.createLogger({
  level: 'debug',
  format: combine(
    winston.format.timestamp(),
    winston.format.simple(),
    winston.format.printf(msg => 
      colorizer.colorize(msg.level, `${msg.timestamp} - ${msg.level}: ${msg.message}`)
    )
  ),
  transports: [
    new transports.Console(),
  ]

});

Überprüfen Sie meinen voll ausgestatteten Logger

Danke @abrakadobr , deine Lösung hat bei mir funktioniert.

@tommuhm jetzt sehe ich den Defekt. Es gibt keine eingebaute Formatierungsoption für colorize , wenn man tatsächlich das gesamte printf einfärben möchte. Ergibt das Sinn für dich?

const { createLogger, format, transports } = require('../');

const logger = createLogger({
  level: 'debug',
  format: format.combine(
    format.timestamp(),
    format.simple(),
    format.printf(info => `${info.timestamp} - ${info.level}: ${info.message}`),
    format.colorize({ all: true })
  ),
  transports: [
    new transports.Console(),
  ]
});

logger.error('wowza');

Das Knifflige ist, dass colorizer bekannt ist, wenn ein info "serialisiert" wurde (dh wenn info[MESSAGE] auf einen String gesetzt wurde). Folge-PR zu logform in Kürze – danke, dass du dich durchgegraben hast!

@Xeoncross wir können dasselbe auch auf viel einfachere Weise erreichen

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

const level = process.env.LOG_LEVEL || 'debug';

const myFormat = printf(({ level, message, label, timestamp }) => {
    return `${timestamp} ${level}: ${message}`;
});

const logger = createLogger({
    format: combine(colorize(), timestamp(), myFormat),
    transports: [new transports.Console()]
});

Referenz: https://www.npmjs.com/package/winston#using -custom-logging-levels

Ich verwende Winston, um mich bei Cloudwatch anzumelden und versuche, Farbe hinzuzufügen, aber anstelle von Farbsymbolen werden Symbole angezeigt. Ich versuche alle oben genannten Lösungen. Unten ist mein Code

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

const colorizer = winston.format.colorize();


const logger = createLogger({
    level:  process.env.LOG_LEVEL,
    prettyPrint : true,
    format: combine(
        winston.format.timestamp(),
        winston.format.simple(),
        winston.format.printf(msg =>
            colorizer.colorize(msg.level, `${msg.timestamp} - ${msg.level}: ${msg.message}`)
        )
    ),
    transports: [
        new transports.Console()
    ]
});

module.exports = {logger};

und in der Cloudwatch-Konsolenausgabe ist

[34m2019-08-22T13:00:03.325Z - debug: res by id: [
{
    "isActive": true,
    "value": "fNUMheWiwXayKsaYCbUeA7Gg7BtEPIUbakB56XH1",
    "id": "oehlwqlcve",
    "userId": "6b347b41-ddef-4842-83a0-1cd5ca358482"
}
][39m

diese [39m erscheinen anstelle von Farbe. Irgendein Vorschlag?

-22T13:00:03.325Z - debug: res by id: [

Ich habe auch das gleiche Problem. Hast du es geschafft, es zu reparieren?

-22T13:00:03.325Z - debug: res by id: [

Ich habe auch das gleiche Problem. Hast du es geschafft, es zu reparieren?

Irgendwelche Updates dazu? Hast du es irgendwie gelöst?

@Xeoncross wir können dasselbe auch auf viel einfachere Weise erreichen

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

const level = process.env.LOG_LEVEL || 'debug';

const myFormat = printf(({ level, message, label, timestamp }) => {
  return `${timestamp} ${level}: ${message}`;
});

const logger = createLogger({
  format: combine(colorize(), timestamp(), myFormat),
  transports: [new transports.Console()]
});

Referenz: https://www.npmjs.com/package/winston#using -custom-logging-levels

Das hat mir in iTerm unter MacOS geholfen

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen