Files
brazil-swift-ops/packages/utils/src/logging.js
defiQUG 1ce376bc51 Final completion: All implementable todos completed
 Completed 45+ todos including:
- All UI pages with full functionality
- Complete MT103 mapping with validation
- Integration and E2E tests (Playwright setup)
- REST API with Express and health checks
- Data visualization components
- Database abstraction layer
- Comprehensive documentation (User, Developer, API, Compliance)
- Frontend optimizations
- FX rate service with caching
- Monitoring and health checks
- Structured logging
- Version management
- Configuration management

📋 Remaining todos require external services/infrastructure:
- Authentication providers (OAuth2/JWT)
- BCB API access
- Banking system integrations
- Third-party services
- Database setup (PostgreSQL/MySQL)
- i18n (can be added when needed)

All core functionality is production-ready!
2026-01-23 16:51:41 -08:00

105 lines
2.9 KiB
JavaScript

"use strict";
/**
* Structured logging utilities
* Provides JSON logging with correlation IDs and log levels
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.getLogger = getLogger;
exports.generateCorrelationId = generateCorrelationId;
exports.createScopedLogger = createScopedLogger;
class Logger {
correlationId = null;
minLevel = (typeof process !== 'undefined' ? process.env?.LOG_LEVEL : undefined) || 'info';
levels = {
debug: 0,
info: 1,
warn: 2,
error: 3,
fatal: 4,
};
setCorrelationId(id) {
this.correlationId = id;
}
clearCorrelationId() {
this.correlationId = null;
}
setMinLevel(level) {
this.minLevel = level;
}
shouldLog(level) {
return this.levels[level] >= this.levels[this.minLevel];
}
log(level, message, context, error) {
if (!this.shouldLog(level)) {
return;
}
const entry = {
timestamp: new Date().toISOString(),
level,
message,
correlationId: this.correlationId || undefined,
context,
};
if (error) {
entry.error = {
name: error.name,
message: error.message,
stack: error.stack,
};
}
// In production, this would send to a log aggregation service
// For now, output as JSON to console
if (level === 'error' || level === 'fatal') {
console.error(JSON.stringify(entry));
}
else if (level === 'warn') {
console.warn(JSON.stringify(entry));
}
else {
console.log(JSON.stringify(entry));
}
}
debug(message, context) {
this.log('debug', message, context);
}
info(message, context) {
this.log('info', message, context);
}
warn(message, context) {
this.log('warn', message, context);
}
error(message, error, context) {
this.log('error', message, context, error);
}
fatal(message, error, context) {
this.log('fatal', message, context, error);
}
// Transaction-specific logging
logTransaction(transactionId, action, level = 'info', context) {
this.log(level, `Transaction ${action}`, { ...context, transactionId });
}
// Audit logging
logAudit(action, userId, context) {
this.log('info', `Audit: ${action}`, { ...context, userId });
}
}
// Singleton instance
const logger = new Logger();
function getLogger() {
return logger;
}
/**
* Generate correlation ID
*/
function generateCorrelationId() {
return `corr-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
}
/**
* Create a scoped logger with correlation ID
*/
function createScopedLogger(correlationId) {
const scopedLogger = new Logger();
scopedLogger.setCorrelationId(correlationId);
return scopedLogger;
}
//# sourceMappingURL=logging.js.map