blanc-logger
Version:
Advanced Winston logger for NestJS & TypeORM with structured logging.
91 lines (90 loc) • 5.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TypeOrmBlancLogger = void 0;
const chalk = require("chalk");
const util = require("util");
const sql_formatter_1 = require("../helper/sql-formatter");
const blanc_logger_1 = require("./blanc-logger");
class TypeOrmBlancLogger {
/** SQL 쿼리를 포맷팅하여 강조된 문자열을 반환 */
formatQuery(query, params) {
const highlightedQuery = (0, sql_formatter_1.sqlHighlighter)(query);
const indentedQuery = (0, sql_formatter_1.indent)(highlightedQuery);
const paramsText = (0, sql_formatter_1.formatParameters)(params !== null && params !== void 0 ? params : []);
const analysisText = (0, sql_formatter_1.addQueryAnalysis)(query);
return [
chalk.dim('╔═ SQL Query ═════════════════════════════════'),
indentedQuery,
paramsText ? chalk.dim('╠═ Parameters ═══════════════════════════════') : '',
paramsText ? (0, sql_formatter_1.indent)(paramsText) : '',
analysisText ? chalk.dim('╠═ Analysis ═════════════════════════════════') : '',
analysisText ? (0, sql_formatter_1.indent)(analysisText) : '',
chalk.dim('╚═════════════════════════════════════════════\n'),
]
.filter((line) => line.trim() !== '')
.join('\n');
}
/** SQL 쿼리를 로그에 기록 */
logQuery(query, parameters, queryRunner) {
const message = this.formatQuery(query, parameters);
blanc_logger_1.blancLogger.log('info', `[SQL Execute]\n${message}`);
}
/** SQL 쿼리 실행 중 발생한 오류를 로그에 기록 */
logQueryError(error, query, parameters, queryRunner) {
const errMsg = error instanceof Error ? error.message : error;
const formattedError = chalk.redBright.bold(errMsg);
const message = [
chalk.dim('╔═ SQL Error ════════════════════════════════'),
`Error: ${formattedError}`,
chalk.dim('╠═ Stack Trace ═══════════════════════════════'),
chalk.gray(util.inspect(error instanceof Error ? error.stack : '', { depth: 2 })),
this.formatQuery(query, parameters),
chalk.dim('╚═════════════════════════════════════════════\n'),
].join('\n');
blanc_logger_1.blancLogger.log('error', message);
}
/** 느린 SQL 쿼리 실행을 경고 로그로 기록 */
logQuerySlow(time, query, parameters, queryRunner) {
const formattedTime = chalk.magenta(`${time}ms`);
const message = [
chalk.dim('╔═ Slow Query Warning (Threshold >100ms) ═══════'),
`Execution Time: ${formattedTime}`,
chalk.dim('╠═ SQL Query ═════════════════════════════════'),
(0, sql_formatter_1.indent)((0, sql_formatter_1.sqlHighlighter)(query)),
parameters && parameters.length > 0
? chalk.dim('╠═ Parameters ═══════════════════════════════')
: '',
parameters && parameters.length > 0 ? (0, sql_formatter_1.indent)((0, sql_formatter_1.formatParameters)(parameters)) : '',
chalk.dim('╚═════════════════════════════════════════════\n'),
]
.filter((line) => line.trim() !== '')
.join('\n');
blanc_logger_1.blancLogger.log('warn', message);
}
/** 스키마 빌드 관련 메시지를 로그에 기록 */
logSchemaBuild(message, queryRunner) {
const schemaMessage = [
chalk.dim('╔═ Schema Build ═════════════════════════════'),
chalk.green(message),
chalk.dim('╚═════════════════════════════════════════════\n'),
].join('\n');
blanc_logger_1.blancLogger.log('info', schemaMessage);
}
/** 데이터베이스 마이그레이션 관련 메시지를 로그에 기록 */
logMigration(message, queryRunner) {
const migrationMessage = [
chalk.dim('╔═ Database Migration ═════════════════════'),
chalk.green(message),
chalk.dim('╚═════════════════════════════════════════════\n'),
].join('\n');
blanc_logger_1.blancLogger.log('info', migrationMessage);
}
/** 지정된 레벨의 일반 로그 메시지를 기록 */
log(level, message, queryRunner) {
const header = chalk.dim(`╔═ TypeORM ${level.toUpperCase()} ═════════════════════`);
const footer = chalk.dim('╚═════════════════════════════════════════════\n');
const formattedMessage = level === 'warn' ? chalk.yellow(String(message)) : chalk.white(String(message));
blanc_logger_1.blancLogger.log(level, `${header}\n${formattedMessage}\n${footer}`);
}
}
exports.TypeOrmBlancLogger = TypeOrmBlancLogger;