이렇게 간단하게 로깅을 걸 수 있었다..?
{
name: "mysql",
type: "mysql",
host: "localhost",
port: 3306,
username: "test",
password: "test",
database: "test",
...
logging: true
}
{
host: "localhost",
...
logging: ["query", "error"]
}
이런 옵션을 선택할 수 있지만,
query - logs all queries.
error - logs all failed queries and errors.
schema - logs the schema build process.
warn - logs internal orm warnings.
info - logs internal orm informative messages.
log - logs internal orm log messages.
다 하고 싶으면 그냥 all 걸면 됨
{
host: "localhost",
...
logging: "all"
}
이건 모든 쿼리를 대상으로 1초 이상 걸리는 쿼리를 로그한다.
{
host: "localhost",
...
maxQueryExecutionTime: 1000
}
TypeORM은 기본적으로 4개의 로거를 제공함
debug 쓰려면 환경 변수 DEBUG를 설정해야 함.
DEBUG=typeorm:* 이렇게 설정하면 TypeORM 관련 모든 로깅 메시지 활성화되며 콘솔에 출력
logging 옵션의 무시: debug 로거는 TypeORM의 logging 설정 옵션에 영향을 받지 않습니다. 즉, logging 옵션을 true나 false로 설정해도 debug 로거의 동작에는 변화가 없습니다. 로깅 활성화는 오직 DEBUG 환경 변수에 의해서만 제어됩니다.
로거 설정은 이렇게 함.
{
host: "localhost",
...
logging: true,
logger: "file"
}
Logger 인터페이스로 커스텀 로거 생성 가능
import { Logger } from "typeorm"
export class MyCustomLogger implements Logger {
// implement all methods from logger class
}
와.. 이런 식으로 커스텀을..?
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,
})
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
}
}
}
}
커스텀 로거 설정하기
결국 인스턴스네
const dataSource = new DataSource({
name: "mysql",
type: "mysql",
host: "localhost",
port: 3306,
username: "test",
password: "test",
database: "test",
logger: new MyCustomLogger(),
})

