transport personalizat winston cu typescript
Am dificultăți să încerc să compilez un logger personalizat Winston folosind TypeScript.
Ia acest cod js ca punct de plecare și ținând cont de acest comentariu de pe github:
import * as Transport from 'winston-transport'
//
// Inherit from `winston-transport` so you can take advantage
// of the base functionality and `.exceptions.handle()`.
//
module.exports = class YourCustomTransport extends Transport {
constructor(opts) {
super(opts);
//
// Consume any custom options here. e.g.:
// - Connection information for databases
// - Authentication information for APIs (e.g. loggly, papertrail,
// logentries, etc.).
//
}
log(info, callback) {
setImmediate(() => {
this.emit('logged', info);
});
// Perform the writing to the remote service
callback();
}
};
Dar primesc eroarea:
Type 'typeof TransportStream' is not a constructor function type.ts(2507)
Am încercat cu mai multe alternative, dar întotdeauna ajung blocat de compilatorul TypeScript.
Răspuns #1
Când înlocuiesc declarația ta de import cu
import Transport = require('winston-transport');
atunci tsc nu are plângeri. Acest lucru este similar cu modul în care transportul de fișiere încorporat importă winston-transport.
Răspunsul #2
În caz că mai are cineva nevoie de asta.
Nu uitați să instalați 'winston-transport', deoarece nu face parte din biblioteca standard winston.
npm i winston-transportimport Transport from 'winston-transport';
import { createLogger } from 'winston';
class CustomTransport extends Transport {
constructor(opts) {
super(opts);
}
log(info, callback) {
// do whatever you want with log data
callback();
}
};
// Using transport
const transport = new CustomTransport({});
// Create a logger and consume an instance of your transport
const logger = createLogger({
transports: [transport]
});
// Use logger
logger.info('Here I am');
