RakLibInterface: Add error ID to make logs searchable when players report legitimate issues

This commit is contained in:
Dylan K. Taylor 2019-02-28 16:31:14 +00:00
parent d528fdddfa
commit 13b9fd7b66

View File

@ -39,8 +39,10 @@ use raklib\server\ServerHandler;
use raklib\server\ServerInstance; use raklib\server\ServerInstance;
use raklib\utils\InternetAddress; use raklib\utils\InternetAddress;
use function addcslashes; use function addcslashes;
use function bin2hex;
use function count; use function count;
use function implode; use function implode;
use function random_bytes;
use function rtrim; use function rtrim;
use function spl_object_id; use function spl_object_id;
use function substr; use function substr;
@ -159,15 +161,16 @@ class RakLibInterface implements ServerInstance, AdvancedNetworkInterface{
try{ try{
$session->handleEncoded($buf); $session->handleEncoded($buf);
}catch(BadPacketException $e){ }catch(BadPacketException $e){
$errorId = bin2hex(random_bytes(6));
$logger = $this->server->getLogger(); $logger = $this->server->getLogger();
$logger->error("Bad packet from $address $port: " . $e->getMessage()); $logger->error("Bad packet from $address $port (error ID $errorId): " . $e->getMessage());
//intentionally doesn't use logException, we don't want spammy packet error traces to appear in release mode //intentionally doesn't use logException, we don't want spammy packet error traces to appear in release mode
$logger->debug("Origin: " . Utils::cleanPath($e->getFile()) . "(" . $e->getLine() . ")"); $logger->debug("Origin: " . Utils::cleanPath($e->getFile()) . "(" . $e->getLine() . ")");
foreach(Utils::printableTrace($e->getTrace()) as $frame){ foreach(Utils::printableTrace($e->getTrace()) as $frame){
$logger->debug($frame); $logger->debug($frame);
} }
$session->disconnect("Packet processing error"); $session->disconnect("Packet processing error (Error ID: $errorId)");
$this->interface->blockAddress($address, 5); $this->interface->blockAddress($address, 5);
} }
} }