winston
versión? _winston@2
winston@3
node -v
salidas: _ v9.8.0Tengo 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) {
~~~~~
No hay error
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
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.
Comentario más útil
Esto es un problema porque está agregando
stream
directamente en su registrador, intente esto en su lugar:Luego cambie su inicio de sesión expreso de esta manera:
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:
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.