Winston: función de escritura de logger.stream de error de typscript

Creado en 30 jun. 2018  ·  4Comentarios  ·  Fuente: winstonjs/winston

Háblenos de su entorno:

  • _ winston versión? _

    • [] winston@2

    • [X] winston@3

  • _ node -v salidas: _ v9.8.0
  • _Sistema operativo? _ MacOS
  • _Language? _ Mecanografiado: Versión 2.9.1

¿Cuál es el problema?

Tengo un error de mecanografiado al intentar crear una función de escritura en el 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) {
               ~~~~~

¿Qué esperas que suceda en su lugar?

No hay error

Otro

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

Estoy siguiendo este tutorial:

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

bug

Comentario más útil

Esto es un problema porque está agregando stream directamente en su registrador, intente esto en su lugar:

// At the bottom of your winston config add

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

Luego cambie su inicio de sesión expreso de esta manera:

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

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

Debido al error que publicó, supongo que está utilizando mecanografiado, por lo que mi ejemplo está escrito en mecanografiado. Un pequeño problema, puede tener la tentación de escribir su flujo de esta manera:

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

Sin embargo, esto arrojará una excepción ya que el segundo argumento de la función de flujo no es lo que espera su función de registrador info . Déjeme saber si esto ayuda.

Todos 4 comentarios

tiene el mismo error

A primera vista, parece que el problema está en las definiciones de tipo: stream(options?: any): NodeJS.ReadableStream; Sospecho que debe ser dúplex.

Editar: Realmente escribible también puede hacerlo. Veré si puedo hacer que funcione.

@DABH, ¿ podrías echarle un vistazo a esto?

Esto es un problema porque está agregando stream directamente en su registrador, intente esto en su lugar:

// At the bottom of your winston config add

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

Luego cambie su inicio de sesión expreso de esta manera:

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

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

Debido al error que publicó, supongo que está utilizando mecanografiado, por lo que mi ejemplo está escrito en mecanografiado. Un pequeño problema, puede tener la tentación de escribir su flujo de esta manera:

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

Sin embargo, esto arrojará una excepción ya que el segundo argumento de la función de flujo no es lo que espera su función de registrador info . Déjeme saber si esto ayuda.

¿Fue útil esta página
0 / 5 - 0 calificaciones