winston
version? _winston@2
winston@3
node -v
sorties: _ v9.8.0J'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) {
~~~~~
Pas d'erreur
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
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.
Commentaire le plus utile
C'est un problème car vous ajoutez
stream
directement dans votre enregistreur, essayez plutôt ceci:Puis changez votre connexion dans express comme ceci:
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:
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.