Winston: função de escrita typscript error logger.stream

Criado em 30 jun. 2018  ·  4Comentários  ·  Fonte: winstonjs/winston

Conte-nos sobre o seu ambiente:

  • _ winston versão? _

    • [] winston@2

    • [X] winston@3

  • _ node -v saídas: _ v9.8.0
  • _Sistema operacional? _ MacOS
  • _Language? _ Typescript: versão 2.9.1

Qual é o problema?

Tenho um erro de digitação ao tentar criar uma função de gravação no objeto 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) {
               ~~~~~

O que você espera que aconteça em vez disso?

Sem erro

Outro

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

Estou seguindo este tutorial:

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

bug

Comentários muito úteis

Isso é um problema porque você está adicionando stream diretamente em seu logger, tente o seguinte:

// At the bottom of your winston config add

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

Em seguida, altere seu expresso de login da seguinte forma:

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

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

Por causa do erro que você postou, estou assumindo que você está usando o texto datilografado, portanto, meu exemplo é escrito em texto datilografado. Um pequeno pegadinho, você pode ficar tentado a escrever seu stream assim:

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

Isso, entretanto, lançará uma exceção, pois o segundo argumento da função stream não é o que sua função de logger info está esperando. Avise-me se isso ajudar.

Todos 4 comentários

tem o mesmo erro

À primeira vista, parece que o problema está nas definições de tipo: stream(options?: any): NodeJS.ReadableStream; Ele precisa ser duplex, eu suspeito.

Edit: Na verdade, gravável pode fazê-lo também. Vou ver se consigo fazer funcionar.

@DABH, você poderia dar uma olhada nisso?

Isso é um problema porque você está adicionando stream diretamente em seu logger, tente o seguinte:

// At the bottom of your winston config add

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

Em seguida, altere seu expresso de login da seguinte forma:

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

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

Por causa do erro que você postou, estou assumindo que você está usando o texto datilografado, portanto, meu exemplo é escrito em texto datilografado. Um pequeno pegadinho, você pode ficar tentado a escrever seu stream assim:

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

Isso, entretanto, lançará uma exceção, pois o segundo argumento da função stream não é o que sua função de logger info está esperando. Avise-me se isso ajudar.

Esta página foi útil?
0 / 5 - 0 avaliações