Nestjs 在自定义记录器中键入表单保存调用1000次以上
我想用nestJs实现typeorm的自定义记录器。我的目标是在MySQL中存储查询 首先,我创建一个实体:Nestjs 在自定义记录器中键入表单保存调用1000次以上,nestjs,typeorm,Nestjs,Typeorm,我想用nestJs实现typeorm的自定义记录器。我的目标是在MySQL中存储查询 首先,我创建一个实体: @Entity('log') export class LogModel extends BaseEntity { @PrimaryGeneratedColumn() id: number @Column({ nullable: true, type: "text" }) query: string } 然后创建一个自定义记录器
@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查询周期,并将日志查询与常规查询分开。您能告诉我如何做吗?你能介绍一个存储库吗?如何做什么?直接使用数据库驱动程序?
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()
}