improve logging

This commit is contained in:
Juergen Kunz
2025-07-03 02:45:08 +00:00
parent 8d7213e91b
commit dddcf8dec4
4 changed files with 148 additions and 17 deletions

View File

@ -401,23 +401,34 @@ export class ConnectionManager extends LifecycleComponent {
// Remove the record from the tracking map
this.connectionRecords.delete(record.id);
// Log connection details
// Use deduplicated logging for connection termination
if (this.smartProxy.settings.enableDetailedLogging) {
logger.log('info',
`Connection terminated: ${record.remoteIP}:${record.localPort} (${reason}) - ` +
`${plugins.prettyMs(duration)}, IN: ${record.bytesReceived}B, OUT: ${record.bytesSent}B`,
logData
// For detailed logging, include more info but still deduplicate by IP+reason
connectionLogDeduplicator.log(
'connection-terminated',
'info',
`Connection terminated: ${record.remoteIP}:${record.localPort}`,
{
...logData,
duration_ms: duration,
bytesIn: record.bytesReceived,
bytesOut: record.bytesSent
},
`${record.remoteIP}-${reason}`
);
} else {
logger.log('info',
`Connection terminated: ${record.remoteIP} (${reason}). Active: ${this.connectionRecords.size}`,
// For normal logging, deduplicate by termination reason
connectionLogDeduplicator.log(
'connection-terminated',
'info',
`Connection terminated`,
{
connectionId: record.id,
remoteIP: record.remoteIP,
reason,
activeConnections: this.connectionRecords.size,
component: 'connection-manager'
}
},
reason // Group by termination reason
);
}
}

View File

@ -90,7 +90,13 @@ export class RouteConnectionHandler {
// Note: For wrapped sockets, this will use the underlying socket IP until PROXY protocol is parsed
const ipValidation = this.smartProxy.securityManager.validateIP(wrappedSocket.remoteAddress || '');
if (!ipValidation.allowed) {
logger.log('warn', `Connection rejected`, { remoteIP: wrappedSocket.remoteAddress, reason: ipValidation.reason, component: 'route-handler' });
connectionLogDeduplicator.log(
'ip-rejected',
'warn',
`Connection rejected from ${wrappedSocket.remoteAddress}`,
{ remoteIP: wrappedSocket.remoteAddress, reason: ipValidation.reason, component: 'route-handler' },
wrappedSocket.remoteAddress
);
cleanupSocket(wrappedSocket.socket, `rejected-${ipValidation.reason}`, { immediate: true });
return;
}