【发布时间】:2021-03-10 12:05:52
【问题描述】:
我在 createConnection() 和 TypeORM 之间设置了 logging: true,这在大多数情况下都可以正常工作。
但是有一种情况,我来自特定query/mutation 的数据字段之一可能包含一个长字符串(50000 - 300000 字符取决于输入,可能更多)。当 typeORM 尝试在 VScode 终端中记录内容时,它可以粉碎 VScode,我想知道 TypeORM 是否可以隐藏这么长的字符串而不是完全禁用所有查询日志记录。
我的理想方法类似于longstring===(基于字符串和文本省略号的修改)===>long...。或者,如有必要,只需为特定查询应用自定义记录器。
因此它仍然可以记录以指示该代码位正在以最少的信息运行。
从文档看来,我只能添加其他信息而不是修改。 https://github.com/typeorm/typeorm/blob/master/docs/logging.md
=============== 更新==============
根据接受的解决方案,我似乎没有正确理解文档。我们可以根据需要自定义记录器。由于我想切断参数。所以我可以做以下事情。
import { AdvancedConsoleLogger, Logger, LoggerOptions, QueryRunner } from "typeorm";
export class CustomLogger extends AdvancedConsoleLogger implements Logger {
constructor(options?: LoggerOptions) {
super(options);
}
//override logquery
logQuery(query: string, paramters?: any[], queryRunner?: QueryRunner) {
const limit = 100;
const paramTextEllipsis = paramters?.map((param) => {
//only cut off string and length longer than 100
if(typeof param === "string" && param.length > limit){
return param.substring(0, limit) + "...";
}
return param;
});
super.logQuery(query, paramTextEllipsis, queryRunner);
}
};
【问题讨论】:
-
最好在 typeorm 的 repo 中针对该主题打开一个问题。你不会在 stackoverflow 中找到太多关于它的信息。
-
@noamsteiner thx,我正准备在那个 repo 中打开一个新问题
标签: typeorm