Winston: fonction d'écriture du journal d'erreurs typscript.

Créé le 30 juin 2018  ·  4Commentaires  ·  Source: winstonjs/winston

Veuillez nous parler de votre environnement:

  • _ winston version? _

    • [] winston@2

    • [X] winston@3

  • _ node -v sorties: _ v9.8.0
  • _Système d'exploitation? _ MacOS
  • _Language? _ Typecript: Version 2.9.1

Quel est le problème?

J'ai une erreur de typographie en essayant de créer une fonction d'écriture dans l'objet logger.stream.

error TS2322: Type '{ write(message: any, encoding: any): void; }' is not assignable to type '(options?: any) => ReadableStream'.
  Object literal may only specify known properties, and 'write' does not exist in type '(options?: any) => ReadableStream'.

39             write(message: any, encoding: any) {
               ~~~~~

Que pensez-vous qu'il se passe à la place?

Pas d'erreur

Autre

const options = {
            file: {
                level: "info",
                filename: `${appRoot}/logs/app.log`,
                handleExceptions: true,
                json: true,
                maxsize: 5242880, // 5MB
                maxFiles: 5,
                colorize: false,
            },
            console: {
                level: "debug",
                handleExceptions: true,
                json: false,
                colorize: true,
            },
        };

        this.logger = winston.createLogger({
            transports: [
                new winston.transports.File(options.file),
                new winston.transports.Console(options.console),
            ],
            exitOnError: false, // do not exit on handled exceptions
        });

        // create a stream object with a 'write' function that will be used by `morgan`
        this.logger.stream = {

            write(message: any, encoding: any) {
                // use the 'info' log level so the output will be picked up by both transports (file and console)
                this.logger.info(message);
            },
        };

Je suis ce tutoriel:

https://www.digitalocean.com/community/tutorials/how-to-use-winston-to-log-node-js-applications

bug

Commentaire le plus utile

C'est un problème car vous ajoutez stream directement dans votre enregistreur, essayez plutôt ceci:

// At the bottom of your winston config add

export const stream = {
  write: (message) => {
    logger.info(message);
  },
};

Puis changez votre connexion dans express comme ceci:

import { stream } from 'config/winston.ts';
import * as morgan from 'morgan';

app.use(morgan('combined', { stream }));

En raison de l'erreur que vous avez postée, je suppose que vous utilisez du dactylographié, donc mon exemple est écrit en tapé. Un petit truc, vous pourriez être tenté d'écrire votre flux comme ceci:

export const stream = {
  write: logger.info,
};

Cependant, cela lèvera une exception car le deuxième argument de la fonction de flux n'est pas ce que votre fonction de journalisation info attend. Faites-moi savoir si cela vous aide.

Tous les 4 commentaires

avoir la même erreur

À première vue, il semble que le problème réside dans les définitions de type: stream(options?: any): NodeJS.ReadableStream; Il doit être duplex, je suppose.

Edit: En fait, inscriptible peut également le faire. Je vais voir si je peux le faire fonctionner.

@DABH pourriez-vous jeter un oeil à ça?

C'est un problème car vous ajoutez stream directement dans votre enregistreur, essayez plutôt ceci:

// At the bottom of your winston config add

export const stream = {
  write: (message) => {
    logger.info(message);
  },
};

Puis changez votre connexion dans express comme ceci:

import { stream } from 'config/winston.ts';
import * as morgan from 'morgan';

app.use(morgan('combined', { stream }));

En raison de l'erreur que vous avez postée, je suppose que vous utilisez du dactylographié, donc mon exemple est écrit en tapé. Un petit truc, vous pourriez être tenté d'écrire votre flux comme ceci:

export const stream = {
  write: logger.info,
};

Cependant, cela lèvera une exception car le deuxième argument de la fonction de flux n'est pas ce que votre fonction de journalisation info attend. Faites-moi savoir si cela vous aide.

Cette page vous a été utile?
0 / 5 - 0 notes