【问题标题】:typeorm save calls more than 1000 times in custom loggertypeorm 在自定义记录器中保存调用超过 1000 次
【发布时间】:2021-11-28 05:38:13
【问题描述】:

我想用nestJs 为typeorm 实现Custom Logger。我的目标是在 MySQL 中存储查询。

首先我创建一个实体:

@Entity('log')
export class LogModel extends BaseEntity {

    @PrimaryGeneratedColumn()
    id: number

    @Column({ nullable: true, type: "text" })
    query: string

}

然后创建一个自定义记录器类,如下所示:

import { Logger, QueryRunner } from 'typeorm'

export class CustomLogger implements Logger {

    logQuery(query: string, parameters?: any[], queryRunner?: QueryRunner) {
        this.saveLog(queryRunner)
    }

    private async saveLog(queryRunner: QueryRunner) {
        if (queryRunner) {
            const log = new LogModel()
            log.query='my query ....'

            const repository = queryRunner.connection.getRepository<LogModel>(LogModel)
            await repository.save(log) // calls more than 1000
        }
    }

    logQueryError(error: string | Error, query: string, parameters?: any[], queryRunner?: QueryRunner) {}

    logQuerySlow(time: number, query: string, parameters?: any[], queryRunner?: QueryRunner) {}

    logSchemaBuild(message: string, queryRunner?: QueryRunner) { }
    logMigration(message: string, queryRunner?: QueryRunner) { }

    log(level: 'log' | 'info' | 'warn', message: any, queryRunner?: QueryRunner) { }
}

在最后一步中,我在 typeorm 配置中使用了上面的 CustomLogger 类:

const typeOrmConfig: TypeOrmModuleOptions = {
    type: 'mysql',
    host: 'localhost',
    port: 3306,
    logging: ['warn', 'error'],
    charset: "utf8mb4_unicode_ci",
    cli: {
        migrationsDir: 'src/migrations'
    },
    ....
    maxQueryExecutionTime: 1000,
    logger: new CustomLogger()
}

任何帮助将不胜感激

【问题讨论】:

    标签: nestjs typeorm


    【解决方案1】:

    我相信您已经创建了一个递归函数。您运行一个调用记录器的查询,运行一个调用记录器的查询,运行一个调用记录器的查询(等等)。您可能需要直接使用数据库驱动程序,以免干扰 TypeORM 查询周期,并将日志查询与常规查询分开。

    【讨论】:

    • 你能指导我怎么做吗?你能介绍一个存储库吗?
    • 怎么办?直接使用数据库驱动?
    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多