Log::info('My message', ['user' => $user]);
// The Output will be
[2021-08-17 09:23:13] local.INFO: test {"user":{"App\\Models\\User":{"name":"Rosalia Mraz Jr.","email":"[email protected]","email_verified_at":"2021-08-17T07:23:13.604361Z","updated_at":"2021-08-17T07:23:13.000000Z","created_at":"2021-08-17T07:23:13.000000Z","id":29,"tax_rate":25}}}
<?php
$user = User::find($user_id);
\Log::error("Something happened to User {$user_id}.", ['object' => $user->toJson()]);
字符串 或者:
<?php
// User.php
[...]
class User
{
[...]
public function __toString()
{
return "{$this->id}";
}
}
// [...]
$user = User::find($user_id);
\Log::error("Something happened to User {$user}.", ['object' => $user->toJson()]);
6条答案
按热度按时间s6fujrry1#
这是可行的,尽管记录整个模型会使日志增长得相当快。
字符串
print_r()方法的第二个参数中的true返回信息而不是打印信息,这允许Log facade将其打印为字符串。
kkih6yb82#
您可以通过print_r或json_encode记录日志。json_encode更具可读性。
举例来说:
字符串
jtw3ybtb3#
我最近开始使用Laravel,所以这在5.3和5.4中肯定有效,不确定是否适用于早期版本。
我能想到的最快的方法(适用于较小的对象)是将对象转换为数组:
字符串
你可能想知道这怎么可能,debug方法的第一个参数(以及error,notice和Log类中的其他日志记录方法)接受string作为第一个参数,我们正在传递数组。
所以,答案就在log writer类中。有一个方法每次都被调用来支持格式化消息,它看起来像这样:
型
为了进一步说明问题,您可以查看:https://github.com/laravel/framework/blob/5.4/src/Illuminate/Log/Writer.php#L199,您将看到formateMessage方法每次都会格式化消息。
cgfeq70w4#
在Laravel 8及更高版本中,不需要在日志语句中使用
print_r()
或json_encode()
。使用第二个参数传递数组。例如:
字符串
wyyhbhjk5#
没有
第一个参数必须是字符串(或字符串对象表示)。如果您希望传递任何其他类型的(原始)数据或对象,您可以始终对它们进行JSON编码,并将它们推送到上下文设置中,如下所示:
字符串
或者:
型
您可以找到有关方法签名here的更多信息。
pxy2qtax6#
在某些情况下,这会导致“分配的内存大小耗尽”异常。(例如,本地异常类)-Gokigoooks
有同样的问题。
字符串
添加
->get()
型