使用 TypeScript 的 Winston 自訂傳輸
我在嘗試使用 TypeScript 編譯一個 Winston 自訂記錄器時遇到了困難。
我正在以這段 js 代碼作為起點,並考慮到來自 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();
}
};
但是我得到錯誤:
Type 'typeof TransportStream' is not a constructor function type.ts(2507)
我嘗試了幾種替代方法,但總是被 TypeScript 編譯器阻擋。
答案#1
當我用……替換你的匯入語句時
import Transport = require('winston-transport');
那麼 tsc 就不會抱怨了。這與內建的檔案傳輸如何匯入 winston-transport 類似。
答案#2
以防有人還需要這個。
別忘了安裝 'winston-transport',因為它不是標準 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');
