我的 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/