Registro de actividad (Logging)
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Habilitar el registro
Puedes activar el registro de todas las consultas y errores simplemente configurando logging: true en las opciones del origen de datos:
{
name: "mysql",
type: "mysql",
host: "localhost",
port: 3306,
username: "test",
password: "test",
database: "test",
...
logging: true
}
Opciones de registro
Puedes habilitar diferentes tipos de registro en las opciones del origen de datos:
{
host: "localhost",
...
logging: ["query", "error"]
}
Si deseas registrar solo las consultas fallidas, agrega únicamente error:
{
host: "localhost",
...
logging: ["error"]
}
Existen otras opciones disponibles:
-
query- registra todas las consultas. -
error- registra todas las consultas fallidas y errores. -
schema- registra el proceso de construcción del esquema. -
warn- registra advertencias internas del ORM. -
info- registra mensajes informativos internos del ORM. -
log- registra mensajes de registro internos del ORM.
Puedes especificar tantas opciones como necesites.
Si quieres habilitar todo el registro, simplemente usa logging: "all":
{
host: "localhost",
...
logging: "all"
}
Registrar consultas lentas
Si tienes problemas de rendimiento, puedes registrar las consultas que tardan demasiado en ejecutarse
configurando maxQueryExecutionTime en las opciones del origen de datos:
{
host: "localhost",
...
maxQueryExecutionTime: 1000
}
Este código registrará todas las consultas que tarden más de 1 second.
Cambiar el logger predeterminado
TypeORM incluye 5 tipos diferentes de loggers:
-
advanced-console- logger predeterminado que registra todos los mensajes en la consola usando colores y resaltado de sintaxis SQL. -
simple-console- logger de consola simple idéntico al avanzado, pero sin resaltado de colores. Útil si tienes problemas o prefieres registros sin colores. -
formatted-console- similar al logger avanzado, pero formatea consultas SQL para mejorar su legibilidad (usa @sqltools/formatter). -
file- escribe todos los registros enormlogs.logen la raíz del proyecto (junto apackage.json). -
debug- utiliza el paquete debug. Actívalo con la variable de entornoDEBUG=typeorm:*(nota: la opción logging no afecta este logger).
Puedes habilitar cualquiera en las opciones del origen de datos:
{
host: "localhost",
...
logging: true,
logger: "file"
}
Usar un logger personalizado
Puedes crear tu propia clase de logger implementando la interfaz Logger:
import { Logger } from "typeorm"
export class MyCustomLogger implements Logger {
// implement all methods from logger class
}
O extender la clase AbstractLogger:
import { AbstractLogger } from "typeorm"
export class MyCustomLogger extends AbstractLogger {
/**
* Write log to specific output.
*/
protected writeLog(
level: LogLevel,
logMessage: LogMessage | LogMessage[],
queryRunner?: QueryRunner,
) {
const messages = this.prepareLogMessages(
logMessage,
{
highlightSql: false,
},
queryRunner,
)
for (let message of messages) {
switch (message.type ?? level) {
case "log":
case "schema-build":
case "migration":
console.log(message.message)
break
case "info":
case "query":
if (message.prefix) {
console.info(message.prefix, message.message)
} else {
console.info(message.message)
}
break
case "warn":
case "query-slow":
if (message.prefix) {
console.warn(message.prefix, message.message)
} else {
console.warn(message.message)
}
break
case "error":
case "query-error":
if (message.prefix) {
console.error(message.prefix, message.message)
} else {
console.error(message.message)
}
break
}
}
}
}
Y especificarlo en las opciones del origen de datos:
import { DataSource } from "typeorm"
import { MyCustomLogger } from "./logger/MyCustomLogger"
const dataSource = new DataSource({
name: "mysql",
type: "mysql",
host: "localhost",
port: 3306,
username: "test",
password: "test",
database: "test",
logger: new MyCustomLogger(),
})
Los métodos del logger pueden aceptar QueryRunner cuando esté disponible. Esto es útil para registrar datos adicionales.
Además, a través del query runner puedes acceder a datos adicionales pasados durante operaciones de persistencia/eliminación. Por ejemplo:
// user sends request during entity save
postRepository.save(post, { data: { request: request } });
// in logger you can access it this way:
logQuery(query: string, parameters?: any[], queryRunner?: QueryRunner) {
const requestUrl = queryRunner && queryRunner.data["request"] ? "(" + queryRunner.data["request"].url + ") " : "";
console.log(requestUrl + "executing query: " + query);
}