【问题标题】:How to add custom function to Winston logger in Typescript?如何在 Typescript 中向 Winston 记录器添加自定义功能?
【发布时间】:2021-09-14 15:03:18
【问题描述】:

这个问题与 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,所以我想要一个自定义上下文设置器。

【问题讨论】:

    标签: javascript typescript typescript-typings typescript2.0 winston


    【解决方案1】:

    一次简单地构造两个接口的交集(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
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 2018-10-06
      • 2018-03-07
      • 2020-02-13
      相关资源
      最近更新 更多