Winston: typscript error logger.stream Schreibfunktion

Erstellt am 30. Juni 2018  ·  4Kommentare  ·  Quelle: winstonjs/winston

Bitte erzählen Sie uns etwas über Ihre Umgebung:

  • _ winston Version? _

    • [] winston@2

    • [X] winston@3

  • _ node -v Ausgaben: _ v9.8.0
  • _Bedienungssystem? _ MacOS
  • _Sprache? _ Typoskript: Version 2.9.1

Was ist das Problem?

Ich habe einen Typoskriptfehler beim Versuch, eine Schreibfunktion im logger.stream-Objekt zu erstellen.

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) {
               ~~~~~

Was erwarten Sie stattdessen?

Kein Fehler

Andere

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

Ich folge diesem Tutorial:

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

bug

Hilfreichster Kommentar

Dies ist ein Problem, da Sie stream direkt in Ihren Logger einfügen. Versuchen Sie stattdessen Folgendes:

// At the bottom of your winston config add

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

Ändern Sie dann Ihren Login-Express wie folgt:

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

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

Aufgrund des von Ihnen geposteten Fehlers gehe ich davon aus, dass Sie Typoskript verwenden, daher ist mein Beispiel in Typoskript geschrieben. Ein kleines Problem, Sie könnten versucht sein, Ihren Stream so zu schreiben:

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

Dies löst jedoch eine Ausnahme aus, da das zweite Argument der Stream-Funktion nicht den Erwartungen Ihrer Logger-Funktion info entspricht. Lassen Sie mich wissen, ob das hilft.

Alle 4 Kommentare

habe den gleichen Fehler

Auf den ersten Blick sieht es so aus, als ob das Problem in den Typdefinitionen liegt: stream(options?: any): NodeJS.ReadableStream; Ich vermute, es muss Duplex sein.

Bearbeiten: Tatsächlich kann es auch beschreibbar sein. Ich werde sehen, ob ich es zum Laufen bringen kann.

@DABH könntest du dir das mal ansehen?

Dies ist ein Problem, da Sie stream direkt in Ihren Logger einfügen. Versuchen Sie stattdessen Folgendes:

// At the bottom of your winston config add

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

Ändern Sie dann Ihren Login-Express wie folgt:

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

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

Aufgrund des von Ihnen geposteten Fehlers gehe ich davon aus, dass Sie Typoskript verwenden, daher ist mein Beispiel in Typoskript geschrieben. Ein kleines Problem, Sie könnten versucht sein, Ihren Stream so zu schreiben:

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

Dies löst jedoch eine Ausnahme aus, da das zweite Argument der Stream-Funktion nicht den Erwartungen Ihrer Logger-Funktion info entspricht. Lassen Sie mich wissen, ob das hilft.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

alditis picture alditis  ·  3Kommentare

pocesar picture pocesar  ·  3Kommentare

sinai-doron picture sinai-doron  ·  3Kommentare

JaehyunLee-B2LiNK picture JaehyunLee-B2LiNK  ·  3Kommentare

xungwoo picture xungwoo  ·  3Kommentare