feat(logging): replace 207 console.log/error/warn with pino structured logger (#58)

- Add pino + pino-pretty dependencies
- Create src/utils/logger.js with env-based LOG_LEVEL
- Replace all 207 console.log/error/warn calls across 46 source files
- Remove [DEBUG], [ERROR] string prefixes (levels convey this)
- Add pino redact for sensitive fields (mnemonic, privateKey, token, etc.)
- Structured logging with context objects instead of string interpolation
- NODE_ENV=production disables pino-pretty transport

49 files changed, 5601 insertions, 6056 deletions
This commit is contained in:
NW
2026-06-22 01:42:47 +01:00
parent ba80784ae7
commit ce1b6003cb
49 changed files with 5624 additions and 6079 deletions

View File

@@ -3,6 +3,7 @@
import db from "../config/database.js";
import Wallet from "../models/Wallet.js";
import WalletUtils from "../utils/walletUtils.js";
import logger from "../utils/logger.js";
const ALLOWED_USER_FIELDS = new Set([
'telegram_id', 'username', 'country', 'city',
@@ -35,7 +36,6 @@ class UserService {
try {
// Нормализуем и валидируем telegram_id
const normalizedTelegramId = this.normalizeTelegramId(userData?.telegram_id);
// console.log("Normalized telegram_id:", normalizedTelegramId); // Отладочный вывод
this.validateTelegramId(normalizedTelegramId);
// Обновляем значение telegram_id в объекте userData
@@ -44,7 +44,7 @@ class UserService {
// Проверяем, существует ли пользователь с таким telegram_id
const existingUser = await this.getUserByTelegramId(normalizedTelegramId);
if (existingUser) {
console.log("User already exists with telegram_id:", normalizedTelegramId);
logger.info({ telegramId: normalizedTelegramId }, 'User already exists');
return existingUser.id;
}
@@ -70,7 +70,7 @@ class UserService {
return result.lastID;
} catch (error) {
await db.runAsync('ROLLBACK');
console.error('Error creating user:', error);
logger.error({ err: error }, 'Error creating user');
throw error;
}
}
@@ -82,7 +82,7 @@ class UserService {
[String(userId)]
);
} catch (error) {
console.error('Error getting user:', error);
logger.error({ err: error }, 'Error getting user');
throw error;
}
}
@@ -95,7 +95,7 @@ class UserService {
[normalizedTelegramId]
);
} catch (error) {
console.error('Error getting user:', error);
logger.error({ err: error }, 'Error getting user');
throw error;
}
}
@@ -120,7 +120,7 @@ class UserService {
GROUP BY u.id
`, [normalizedTelegramId]);
} catch (error) {
console.error('Error getting user stats:', error);
logger.error({ err: error }, 'Error getting user stats');
throw error;
}
}
@@ -169,9 +169,9 @@ class UserService {
[remainingBalance, user.id]
);
console.log(`[DEBUG] Updated total_balance for user ${user.id}: ${remainingBalance}`);
logger.debug({ userId: user.id, remainingBalance }, 'Updated total_balance');
} catch (error) {
console.error('Error recalculating user balance:', error);
logger.error({ err: error }, 'Error recalculating user balance');
throw error;
}
}
@@ -196,7 +196,7 @@ class UserService {
await db.runAsync('COMMIT');
} catch (e) {
await db.runAsync("ROLLBACK");
console.error('Error deleting user:', e);
logger.error({ err: e }, 'Error deleting user');
throw e;
}
}
@@ -211,7 +211,7 @@ class UserService {
// Возвращаем сумму доступного крипто-баланса и бонусного баланса
return user.total_balance + user.bonus_balance;
} catch (error) {
console.error('Error getting user balance:', error);
logger.error({ err: error }, 'Error getting user balance');
throw error;
}
}