Skip to content

Commit

Permalink
Merge pull request #2 from reatang/fix/grpc_logger_bug
Browse files Browse the repository at this point in the history
Fix/grpc logger bug
  • Loading branch information
reatang authored Jul 27, 2023
2 parents d8dde22 + 3a16ba1 commit cbfaff0
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 33 deletions.
22 changes: 11 additions & 11 deletions src/Middlewares/GrpcLogger.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ class GrpcLogger extends Interceptor
*/
protected $logger;

public function __construct(LoggerInterface $logger) {
public function __construct(LoggerInterface $logger)
{
$this->setLogger($logger);
}

Expand All @@ -46,13 +47,12 @@ public function interceptUnaryUnary(
private function responseLog($name, ?Message $argument, ?Message $response, $status, $startTime)
{
$t = (microtime(true) - $startTime) * 1000;
if ($this->logger) {
$this->writeLogInfo("[GRPC] CALL {$name} - Time: {$t}", [
'status' => "{$status->code}:$status->details",
'request' => $this->decodeMessage($argument),
'response' => $this->decodeMessage($response),
]);
}

$this->writeLogInfo("[GRPC] CALL {$name} - Time: {$t}", [
'status' => "{$status->code}:$status->details",
'request' => $this->decodeMessage($argument),
'response' => $this->decodeMessage($response),
]);
}

private function decodeMessage(?Message $message) : ?array
Expand All @@ -61,13 +61,13 @@ private function decodeMessage(?Message $message) : ?array
return null;
}

// 注意,php 的 serializeToJsonString 不支持 google.protobuf.Any 参数的自动解析为JSON,需手动转换
// 如果 message 参数中存在Any类型,此处会报错
return json_decode($message->serializeToJsonString(), true);
}

protected function writeLogInfo($message, array $context = [])
{
if ($this->logger) {
$this->logger->info($message, $context);
}
$this->logger->info($message, $context);
}
}
22 changes: 3 additions & 19 deletions src/Middlewares/GrpcRetry.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Grpc\UnaryCall;
use Psr\Log\LoggerInterface;
use Reatang\GrpcPHPAbstract\Call\ResponseCall;
use Reatang\GrpcPHPAbstract\Utils\LoggerTrait;
use const Grpc\STATUS_UNAVAILABLE;
use const Grpc\STATUS_ABORTED;

Expand All @@ -17,6 +18,8 @@
*/
class GrpcRetry extends Interceptor
{
use LoggerTrait;

/** @var int 最大重试次数 */
protected $maxAttempts;

Expand All @@ -25,13 +28,6 @@ class GrpcRetry extends Interceptor

protected $retryableStatusCodes = [];

/**
* 日志记录
*
* @var LoggerInterface
*/
protected $logger;

public function __construct(
$maxAttempts = 3,
$delay = 300,
Expand Down Expand Up @@ -84,16 +80,4 @@ public function interceptUnaryUnary(

return new ResponseCall(null, $status);
}

/**
* @param LoggerInterface $logger
*
* @return $this
*/
public function setLogger(LoggerInterface $logger)
{
$this->logger = $logger;

return $this;
}
}
9 changes: 6 additions & 3 deletions src/Utils/LoggerTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,20 @@ trait LoggerTrait
protected $logger = null;

/**
* @param LoggerInterface $logger
* @param LoggerInterface|null $logger
*
* @return self
* @return $this
*/
public function setLogger(LoggerInterface $logger)
public function setLogger(?LoggerInterface $logger)
{
$this->logger = $logger;

return $this;
}

/**
* @return LoggerInterface|null
*/
protected function getLogger(): ?LoggerInterface
{
return $this->logger;
Expand Down

0 comments on commit cbfaff0

Please sign in to comment.