Nestjs |使用 ConfigService 设置日志级别

问题描述

如何使用 ConfigService 设置允许的日志级别?

我尝试通过 main.ts 执行此操作,但在 app 创建调用期间设置了 logLevels,这也是 get ConfigService 所必需的。

const app = await nestFactory.create(
    AppModule.register(),{ logger: configService.get('LOG_LEVELS') }    // <-- at this point I still can't do: const configService = app.get(ConfigService);
);

是否可以创建 app 对象并将 logLevels 设置为认值然后覆盖它?像这样:

const app = await nestFactory.create(
    AppModule.register(),{ logger: true }
);

const configService = app.get('ConfigService');
app.setLogLevels(configService.get('LOG_LEVELS'));

也尝试了不同的途径,但解决方案并不理想。我首先尝试在 MyLogger 的构造函数中设置 logLevels,但类成员 logLevels 是 Logger 私有的,因此我无法覆盖它。方法 isLogLevelEnabled(level) 似乎也是如此。

到目前为止我发现的唯一选项是检查实际日志记录方法中允许的日志级别:日志、警告、错误等...

@Injectable()
export class MyLogger extends Logger {
    constructor(private configService: ConfigService) {
        super();
        MyLogger.logLevels = configService.get('LOG_LEVELS')   // <-- can't set because it's private to Logger
    }

    isLogLevelEnabled(level) {}   // <-- can't override because it's private to Logger


    log(message: any,context? string): void {
        const logLevels = this.configService.get('LOG_LEVELS');
        // check if this method has the right level to log the message depending on logLevels before proceeding
        super.log(message,context);
    }
}

有没有更好的方法来做到这一点?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...