Logging
Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
Abilitazione del logging
Puoi abilitare la registrazione di tutte le query e degli errori impostando semplicemente logging: true nelle opzioni della data source:
{
name: "mysql",
type: "mysql",
host: "localhost",
port: 3306,
username: "test",
password: "test",
database: "test",
...
logging: true
}
Opzioni di logging
Puoi abilitare diversi tipi di logging nelle opzioni della data source:
{
host: "localhost",
...
logging: ["query", "error"]
}
Se vuoi registrare solo le query fallite, aggiungi soltanto error:
{
host: "localhost",
...
logging: ["error"]
}
Altre opzioni disponibili:
-
query- registra tutte le query. -
error- registra tutte le query fallite e gli errori. -
schema- registra il processo di costruzione dello schema. -
warn- registra i warning interni dell'ORM. -
info- registra i messaggi informativi interni dell'ORM. -
log- registra i messaggi di log interni dell'ORM.
Puoi specificare tutte le opzioni necessarie.
Per abilitare completamente il logging, usa logging: "all":
{
host: "localhost",
...
logging: "all"
}
Registrazione query lente
In caso di problemi prestazionali, puoi registrare le query che impiegano troppo tempo
impostando maxQueryExecutionTime nelle opzioni della data source:
{
host: "localhost",
...
maxQueryExecutionTime: 1000
}
Questo codice registrerà tutte le query che superano 1 second di esecuzione.
Modifica del logger predefinito
TypeORM include 5 tipi di logger:
-
advanced-console- logger predefinito che registra tutti i messaggi in console utilizzando colori e l'evidenziazione della sintassi SQL. -
simple-console- logger console semplice, identico a quello avanzato ma senza evidenziazione colori. Utile in caso di problemi o se non si gradiscono i log colorati. -
formatted-console- quasi identico al logger avanzato, ma formatta le query SQL per una migliore leggibilità (utilizzando @sqltools/formatter). -
file- scrive tutti i log inormlogs.lognella cartella principale del progetto (vicino apackage.json). -
debug- utilizza il pacchetto debug; per attivarlo imposta la variabile d'ambienteDEBUG=typeorm:*(nota: l'opzione di logging non ha effetto su questo logger).
Puoi abilitarli nelle opzioni della data source:
{
host: "localhost",
...
logging: true,
logger: "file"
}
Utilizzo di logger personalizzati
Puoi creare un logger personalizzato implementando l'interfaccia Logger:
import { Logger } from "typeorm"
export class MyCustomLogger implements Logger {
// implement all methods from logger class
}
Oppure estendendo la classe 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
}
}
}
}
E specificarlo nelle opzioni della data source:
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(),
})
I metodi del logger possono accettare QueryRunner quando disponibile, utile per registrare dati aggiuntivi.
Inoltre, tramite il query runner, puoi accedere a dati supplementari passati durante operazioni di persistenza/rimozione. Esempio:
// 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);
}