2017-02-01 17 views
8

Tôi có thể thấy rằng mặt tiền Log rất hữu ích. Trong các tài liệu của laravel:Cách đăng nhập đối tượng?

Các logger cung cấp các mức Tám khai thác gỗ được định nghĩa trong RFC 5424: khẩn cấp, cảnh báo, phê phán, lỗi, cảnh báo, thông báo, thông tin và debug.

Nhưng, tôi làm cách nào để ghi lại một phiên bản của mô hình? ví dụ:

$user= User::find($user_id); 

khi đó, bạn có thể đăng nhập đối tượng $user không?

Trả lời

1

số

Tham số đầu tiên phải là một chuỗi (hoặc một đại diện đối tượng string). Nếu bạn muốn vượt qua bất kỳ loại khác của (thô) dữ liệu hoặc đối tượng, bạn luôn có thể JSON mã hóa chúng, và đẩy chúng vào các thiết lập bối cảnh, như vậy:

<?php 

$user = User::find($user_id); 

\Log::error("Something happened to User {$user_id}.", ['object' => $user->toJson()]); 

Hoặc:

<?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()]); 

Bạn có thể tìm thêm thông tin về chữ ký phương thức here.

13

Thao tác này sẽ hoạt động, mặc dù việc ghi nhật ký toàn bộ mô hình sẽ tăng nhật ký của bạn khá nhanh.

Log::info(print_r($user, true)); 

Các đúng trong tham số thứ hai của phương pháp print_r() trả về thông tin thay vì in nó, cho phép Log mặt tiền in nó như một chuỗi.

1

Gần đây tôi đã bắt đầu sử dụng Laravel, vì vậy điều này chắc chắn hoạt động trong 5.3 và 5.4, không chắc chắn cho các phiên bản trước đó.

Cách nhanh nhất tôi có thể nghĩ đến (phù hợp với đối tượng nhỏ hơn) sẽ được đúc tượng để mảng:

Log::debug((array) $object); 

Yo có thể tự hỏi làm sao có thể, param đầu tiên của phương pháp gỡ lỗi (cũng như lỗi, thông báo và các phương thức ghi khác trong lớp Log) chấp nhận chuỗi như là tham số đầu tiên, và chúng ta đang truyền mảng.

Vì vậy, câu trả lời nằm sâu trong lớp ghi nhật ký. Có một phương pháp đó được gọi là mỗi lần để hỗ trợ định dạng bài viết, và nó trông như thế này:

/** 
* Format the parameters for the logger. 
* 
* @param mixed $message 
* @return mixed 
*/ 
protected function formatMessage($message) 
{ 
    if (is_array($message)) { 
     return var_export($message, true); 
    } elseif ($message instanceof Jsonable) { 
     return $message->toJson(); 
    } elseif ($message instanceof Arrayable) { 
     return var_export($message->toArray(), true); 
    } 

    return $message; 
} 

Cũng để làm rõ hơn những điều nhỏ nhặt chút, bạn có thể có một cái nhìn vào: https://github.com/laravel/framework/blob/5.4/src/Illuminate/Log/Writer.php#L199 và bạn sẽ thấy phương thức formateMessage định dạng tin nhắn mỗi lần.

Các vấn đề liên quan