網站搜尋

使用 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-transport
import 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');