winston
Version? _winston@2
winston@3
node -v
Ausgaben: _ v9.8.0Ich 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) {
~~~~~
Kein Fehler
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
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.
Hilfreichster Kommentar
Dies ist ein Problem, da Sie
stream
direkt in Ihren Logger einfügen. Versuchen Sie stattdessen Folgendes:Ändern Sie dann Ihren Login-Express wie folgt:
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:
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.