feat: Add production logging gating (Phase 1, Task 1.1)
- Created logger utility with environment-based gating (lib/utils/logger.ts) - Replaced 517 console.log statements with logger.log (71% reduction) - Fixed import paths in 15 files (resolved comment-trapped imports) - Added DEBUG_LOGS=false to .env - Achieves 71% immediate log reduction (517/731 statements) - Expected 90% reduction in production when deployed Impact: Reduced I/O blocking, lower log volume in production Risk: LOW (easy rollback, non-invasive) Phase: Phase 1, Task 1.1 (Quick Wins - Console.log Production Gating) Files changed: - NEW: lib/utils/logger.ts (production-safe logging) - NEW: scripts/replace-console-logs.js (automation tool) - Modified: 15 lib/*.ts files (console.log → logger.log) - Modified: .env (DEBUG_LOGS=false) Next: Task 1.2 (Image Size Optimization)
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
*/
|
||||
|
||||
import { PrismaClient } from '@prisma/client'
|
||||
import { logger } from '../utils/logger'
|
||||
import { logCriticalError, logDatabaseOperation } from '../utils/persistent-logger'
|
||||
|
||||
// Singleton Prisma client
|
||||
@@ -13,7 +14,7 @@ export function getPrismaClient(): PrismaClient {
|
||||
prisma = new PrismaClient({
|
||||
log: process.env.NODE_ENV === 'development' ? ['query', 'error', 'warn'] : ['error'],
|
||||
})
|
||||
console.log('✅ Prisma client initialized')
|
||||
logger.log('✅ Prisma client initialized')
|
||||
}
|
||||
return prisma
|
||||
}
|
||||
@@ -177,7 +178,7 @@ export async function createTrade(params: CreateTradeParams) {
|
||||
|
||||
if (attempt < maxRetries) {
|
||||
const delay = baseDelay * Math.pow(2, attempt - 1)
|
||||
console.log(`⏳ Verification failed, retrying in ${delay}ms (attempt ${attempt}/${maxRetries})...`)
|
||||
logger.log(`⏳ Verification failed, retrying in ${delay}ms (attempt ${attempt}/${maxRetries})...`)
|
||||
await new Promise(resolve => setTimeout(resolve, delay))
|
||||
continue // Retry
|
||||
}
|
||||
@@ -185,7 +186,7 @@ export async function createTrade(params: CreateTradeParams) {
|
||||
throw new Error(errorMsg)
|
||||
}
|
||||
|
||||
console.log(`📊 Trade record created & VERIFIED: ${trade.id}`)
|
||||
logger.log(`📊 Trade record created & VERIFIED: ${trade.id}`)
|
||||
logDatabaseOperation('createTrade', true, {
|
||||
table: 'Trade',
|
||||
recordId: trade.id,
|
||||
@@ -206,7 +207,7 @@ export async function createTrade(params: CreateTradeParams) {
|
||||
|
||||
if (attempt < maxRetries) {
|
||||
const delay = baseDelay * Math.pow(2, attempt - 1)
|
||||
console.log(`⏳ Retrying in ${delay}ms...`)
|
||||
logger.log(`⏳ Retrying in ${delay}ms...`)
|
||||
await new Promise(resolve => setTimeout(resolve, delay))
|
||||
continue
|
||||
}
|
||||
@@ -267,7 +268,7 @@ export async function updateTradeExit(params: UpdateTradeExitParams) {
|
||||
},
|
||||
})
|
||||
|
||||
console.log(`📊 Trade closed: ${trade.id} | P&L: $${params.realizedPnL.toFixed(2)}`)
|
||||
logger.log(`📊 Trade closed: ${trade.id} | P&L: $${params.realizedPnL.toFixed(2)}`)
|
||||
return trade
|
||||
} catch (error) {
|
||||
console.error('❌ Failed to update trade exit:', error)
|
||||
@@ -331,7 +332,7 @@ export async function getOpenTrades() {
|
||||
orderBy: { entryTime: 'asc' },
|
||||
})
|
||||
|
||||
console.log(`📊 Found ${trades.length} open trades to restore`)
|
||||
logger.log(`📊 Found ${trades.length} open trades to restore`)
|
||||
return trades
|
||||
} catch (error) {
|
||||
console.error('❌ Failed to get open trades:', error)
|
||||
@@ -589,7 +590,7 @@ export async function createBlockedSignal(params: CreateBlockedSignalParams) {
|
||||
},
|
||||
})
|
||||
|
||||
console.log(`📝 Blocked signal saved: ${params.symbol} ${params.direction} (score: ${params.signalQualityScore}/${params.minScoreRequired})`)
|
||||
logger.log(`📝 Blocked signal saved: ${params.symbol} ${params.direction} (score: ${params.signalQualityScore}/${params.minScoreRequired})`)
|
||||
return blockedSignal
|
||||
} catch (error) {
|
||||
console.error('❌ Failed to save blocked signal:', error)
|
||||
@@ -746,6 +747,6 @@ export async function disconnectPrisma() {
|
||||
if (prisma) {
|
||||
await prisma.$disconnect()
|
||||
prisma = null
|
||||
console.log('✅ Prisma client disconnected')
|
||||
logger.log('✅ Prisma client disconnected')
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user