laravel - 处理在平衡服务器上登录 laravel

标签 laravel logging load-balancing

我的 Laravel 应用程序有 2 个平衡的服务器,但每个服务器都登录到它自己的目标文件夹(我们使用每日文件日志记录):有什么方法可以将日志保存到一个集中位置?

我已经安排了日志配置以在输出中包含服务器名称,但我不知道如何处理这种情况。

也许是对象存储?或者是什么?
非第三方解决方案会更好,我们希望将所有内容都保留在 laravel 和我们的服务器中,但如果别无选择,我们将安排外部解决方案。

最佳答案

现在可能没有“最好”的方法来做到这一点,如果你查看 docs,Laravel 就如何做到这一点提供了很大的灵活性。 .事实上,由于支持 NewRelic,如果您已经在使用 NewRelic,这可能是解决此问题的好方法。

我们使用数据库来记录。我们可以这样做,因为数据库托管在服务器外部,但在 AWS 的同一 VPC 中,这意味着延迟非常低。我们有一张 table ,上面有 id, message, detail, created_at, severity这是一个简单的方法:

在您的 EventServiceProvider (任何服务提供商都可以真正工作)

Event::listen(MessageLogged::class, function (MessageLogged $messageLogged) {
      [ $level, $message, $context ] = [ $messageLogged->level, $messageLogged->message, $messageLogged->context ];
      if (!\Log::getLogger()->isHandling(Logger::toMonologLevel($level))) {
            return; // Don't log if the logger isn't actually handling this level
      }
      if (($message instanceof \Exception || $message instanceof \Throwable)) {
          $context = [$message];
          $message = $message->getMessage();
      }
      DB::table('log')->insert([
          'message' => $message
          'detail' => implode(PHP_EOL, $context ?: []),
          'created_at' => Carbon::now(),
          'severity' => $level
      ]);
});

如果性能是一个问题,您还可以创建一个任务,将日志事件的处理排队,但这意味着您必须将它与事件发生的时间而不是处理时间一起排队。

关于laravel - 处理在平衡服务器上登录 laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61865371/

相关文章:

server - 使用 haproxy 将 *.domain1.com/* 重定向到 *.domain2.com/*

使用 GRPC 流请求进行代理负载平衡

php - Laravel Spark 动态开发人员(适用于 Kiosk)

php - 从字符串值运行方法链

java - 为什么我的日志没有写入属性文件中的配置文件?

android - 如何在 Xamarin Android 应用程序中将日志输出到 SD 卡上的文件?

spring-boot - 我为Spring Boot Docker容器添加负载平衡的选项是什么

php - 使用山魈发送邮件。异步不起作用

php - 我正在努力获取 api 的任何功能

python - 找不到记录器 "__main__"的处理程序