簡體   English   中英

如何在 Typescript 中向 Winston 記錄器添加自定義函數?

[英]How to add custom function to Winston logger in Typescript?

這個問題與 Winston Logger 有關,但可以適用於任何其他情況。 我有以下代碼:

import winston, {Logger} from 'winston';

interface CustomLogger extends Logger {
  setLoggerContext(userId: string): void;
}

const logger: CustomLogger = winston.createLogger({
  transports: [new winston.transports.Console()],
});

logger.setLoggerContext = (userId: string) => {
  logger.defaultMeta = {userId: userId}
}

export default logger;

但是,const logger 是紅色的,並顯示一條錯誤消息:

“Logger”類型中缺少“setLoggerContext”屬性,但“CustomLogger”類型中需要。ts(2741)

我想保護人們不要把他們想要的 defaultMeta 放在他們想要的東西上,我真的需要為此自定義函數,因為稍后我們可能會用其他東西改變 winston,所以我想要一個自定義上下文設置器。

簡單的一次性構造兩個接口的交集(TypeScript看不出你最終構造了符合CustomLogger接口的東西,它只考慮const logger: CustomLogger行):

const CustomLoggerMixin = {
  setLoggerContext(userId: string) {
    logger.defaultMeta = {userId: userId};
  }
};

const logger: CustomLogger = Object.assign(
  winston.createLogger({
    transports: [new winston.transports.Console()],
  }),
  CustomLoggerMixin
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM