nestjs - typeorm 在自定义记录器中保存调用超过 1000 次
问题描述
我想用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()
}
任何帮助,将不胜感激
解决方案
我相信你已经创建了一个递归函数。您运行一个调用记录器的查询,运行一个调用记录器的查询,运行一个调用记录器的查询(等等)。您可能需要直接使用数据库驱动程序,以免干扰 TypeORM 查询周期,并将日志查询与常规查询分开。
推荐阅读
- python - Python IndexError:标量变量的索引无效
- c# - 在 C#/.net API 返回/调用结束后继续运行方法
- python - FCNN:是否有一个 keras 实用程序可以根据输出像素坐标为我提供图像的输入区域
- php - 在 null 上调用成员函数 sendEmail()
- flask - 如何将此 SQL 查询计数月份和按月分组转换为 sqlalchemy?
- css - 用于模态弹出窗口的全角按钮的 CSS
- angularjs - 通过角度形式从 mongo 搜索布尔类型字段
- javascript - ./src/index.js 第 36 行:期望一个赋值或函数调用,但看到一个表达式 no-unused-expressions
- visual-studio-code - Vscode+arduino:在哪里可以找到“arduino.json”解析器?
- python-3.x - 当我尝试将文件打开到 tkinter 文本小部件中时,但收到错误“'str' object has no attribute 'tk'”