日志

开启日志

你只需在连接选项中设置logging:true即可启用所有查询和错误的记录:

  1. {
  2. name: "mysql",
  3. type: "mysql",
  4. host: "localhost",
  5. port: 3306,
  6. username: "test",
  7. password: "test",
  8. database: "test",
  9. ...
  10. logging: true
  11. }

日志选项

可以在连接选项中启用不同类型的日志记录:

  1. {
  2. host: "localhost",
  3. ...
  4. logging: ["query", "error"]
  5. }

如果要启用失败查询的日志记录,则只添加error

  1. {
  2. host: "localhost",
  3. ...
  4. logging: ["error"]
  5. }

还可以使用其他选项:

  • query - 记录所有查询。
  • error - 记录所有失败的查询和错误。
  • schema - 记录架构构建过程。
  • warn - 记录内部 orm 警告。
  • info - 记录内部 orm 信息性消息。
  • log - 记录内部 orm 日志消息。

你可以根据需要指定任意数量的选项。 如果要启用所有日志记录,只需指定logging:“all”

  1. {
  2. host: "localhost",
  3. ...
  4. logging: "all"
  5. }

记录耗时长的查询

如果遇到性能问题,可以通过在连接选项中设置maxQueryExecutionTime来记录执行时间过长的查询:

  1. {
  2. host: "localhost",
  3. ...
  4. maxQueryExecutionTime: 1000
  5. }

此代码将记录所有运行超过1秒的查询。

更改默认记录器

TypeORM 附带 4 种不同类型的记录器:

  • advanced-console - 默认记录器,它将使用颜色和 sql 语法高亮显示所有记录到控制台中的消息(使用chalk)。
  • simple-console - 简单的控制台记录器,与高级记录器完全相同,但它不使用任何颜色突出显示。 如果你又问题/或不喜欢彩色日志,可以使用此记录器。
  • file - 这个记录器将所有日志写入项目根文件夹中的ormlogs.log(靠近package.jsonormconfig.json)。
  • debug - 此记录器使用debug package打开日志记录设置你的 env 变量DEBUG = typeorm:*(注意记录选项对此记录器没有影响)。

你可以在连接选项中启用其中任何一个:

  1. {
  2. host: "localhost",
  3. ...
  4. logging: true,
  5. logger: "file"
  6. }

使用自定义记录器

你可以通过实现Logger接口来创建自己的记录器类:

  1. import { Logger } from "typeorm";
  2. export class MyCustomLogger implements Logger {
  3. // 实现logger类的所有方法
  4. }

并在连接选项中指定它:

  1. import { createConnection } from "typeorm";
  2. import { MyCustomLogger } from "./logger/MyCustomLogger";
  3. createConnection({
  4. name: "mysql",
  5. type: "mysql",
  6. host: "localhost",
  7. port: 3306,
  8. username: "test",
  9. password: "test",
  10. database: "test",
  11. logger: new MyCustomLogger()
  12. });

如果在ormconfig文件中定义了 然后你可以使用它并以下面的方式覆盖它:

  1. import { createConnection, getConnectionOptions } from "typeorm";
  2. import { MyCustomLogger } from "./logger/MyCustomLogger";
  3. // getConnectionOptions将从ormconfig文件中读取选项并将其返回到connectionOptions对象中,
  4. // 然后你只需向其附加其他属性
  5. getConnectionOptions().then(connectionOptions => {
  6. return createConnection(
  7. Object.assign(connectionOptions, {
  8. logger: new MyCustomLogger()
  9. })
  10. );
  11. });

记录器方法可接受QueryRunner。 如果要记录其他数据将会很有帮助。 此外,通过查询运行程序,你可以访问在持久/删除期间传递的其他数据。 例如:

  1. // 用户在实体保存期间发送请求
  2. postRepository.save(post, { data: { request: request } });
  3. // 在logger中你可以这样访问它:
  4. logQuery(query: string, parameters?: any[], queryRunner?: QueryRunner) {
  5. const requestUrl = queryRunner && queryRunner.data["request"] ? "(" + queryRunner.data["request"].url + ") " : "";
  6. console.log(requestUrl + "executing query: " + sql);
  7. }