UNPKG

blanc-logger

Version:

Advanced Winston logger for NestJS & TypeORM with structured logging.

91 lines (90 loc) 5.97 kB
"use strict"; 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;