88 lines
2.3 KiB
TypeScript
88 lines
2.3 KiB
TypeScript
import {ILogger} from './ILogger'
|
|
import {Logger, QueryRunner} from 'typeorm'
|
|
import {Namespace} from 'cls-hooked'
|
|
import {CORRELATION_ID} from '../middleware/Transaction'
|
|
|
|
export class SqlLogger implements Logger {
|
|
constructor(
|
|
protected readonly logger: ILogger,
|
|
protected readonly ns: Namespace,
|
|
) {}
|
|
|
|
logQuery(query: string, parameters?: any[], queryRunner?: QueryRunner): any {
|
|
const correlationId = this.getCorrelationId()
|
|
if (parameters) {
|
|
this.logger.info('%s %s -- %s', correlationId, query, parameters)
|
|
} else {
|
|
this.logger.info('%s %s', correlationId, query)
|
|
}
|
|
}
|
|
/**
|
|
* Logs query that is failed.
|
|
*/
|
|
logQueryError(
|
|
error: string,
|
|
query: string,
|
|
parameters?: any[],
|
|
queryRunner?: QueryRunner,
|
|
) {
|
|
const correlationId = this.getCorrelationId()
|
|
if (parameters) {
|
|
this.logger.error('%s %s :: %s -- %s',
|
|
correlationId, error, query, parameters)
|
|
} else {
|
|
this.logger.error('%s %s :: %s', correlationId, error, query)
|
|
}
|
|
}
|
|
/**
|
|
* Logs query that is slow.
|
|
*/
|
|
logQuerySlow(
|
|
time: number, query: string,
|
|
parameters?: any[],
|
|
queryRunner?: QueryRunner,
|
|
) {
|
|
const correlationId = this.getCorrelationId()
|
|
if (parameters) {
|
|
this.logger.warn('%s Slow query: %d :: %s -- %s',
|
|
correlationId, time, query, parameters)
|
|
} else {
|
|
this.logger.warn('%s Slow query: %d :: %s',
|
|
correlationId, time, query)
|
|
}
|
|
}
|
|
/**
|
|
* Logs events from the schema build process.
|
|
*/
|
|
logSchemaBuild(message: string, queryRunner?: QueryRunner) {
|
|
this.logger.info(message)
|
|
}
|
|
/**
|
|
* Logs events from the migrations run process.
|
|
*/
|
|
logMigration(message: string, queryRunner?: QueryRunner) {
|
|
this.logger.info(message)
|
|
}
|
|
/**
|
|
* Perform logging using given logger, or by default to the console.
|
|
* Log has its own level and message.
|
|
*/
|
|
log(
|
|
level: 'log' | 'info' | 'warn',
|
|
message: any,
|
|
queryRunner?: QueryRunner,
|
|
) {
|
|
const correlationId = this.getCorrelationId()
|
|
if (level === 'log') {
|
|
level = 'info'
|
|
}
|
|
this.logger[level]('%s %o', correlationId, message)
|
|
}
|
|
|
|
protected getCorrelationId(): string | undefined {
|
|
const correlationId: string = this.ns.get(CORRELATION_ID)
|
|
return correlationId || ''
|
|
}
|
|
|
|
}
|