2017-02-01 1 views
8

로그 외관이 매우 유용하다는 것을 알 수 있습니다. laravel의 문서에서 :개체를 기록하는 방법은 무엇입니까?

로거는 RFC 5424에 정의 된 팔 개 로깅 수준을 제공합니다 : 긴급, 경고, 중요, 오류, 경고, 통지, 정보 및 디버그.

그러나 모델 인스턴스를 어떻게 기록합니까? 예를 들면 다음과 같습니다.

그러면 $user 개체를 기록 할 수 있습니까?

답변

1

첫번째 파라미터는 문자열 (혹은 캐릭터 오브젝트 표현)이어야한다. 당신이 (원시) 데이터 또는 객체의 다른 유형을 통과하려면, 당신은 항상 JSON은과 같이, 그것들을 인코딩하고 상황에 맞는 설정에서 그들을 밀어 수 있습니다

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

메소드 서명 here에 대한 자세한 정보를 찾을 수 있습니다.

13

전체 모델을 기록하면 다소 빠르게 로그가 커지지 만 작동합니다.

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

인 print_r() 메서드의 두 번째 매개 변수의 진정한

는 문자열처럼 인쇄 할 수있는 로그 외관을 허용하는 대신 인쇄의 정보를 반환합니다.

1

저는 최근에 Laravel을 사용하기 시작 했으므로 이전 버전에서는 확실하지 않은 5.3 및 5.4에서 작동합니다.

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

요뿐만 아니라 오류 통지로 (디버그 방법이 가능한 최초의 PARAM 얼마나 궁금 수 있습니다 내가 생각할 수있는

가장 빠른 방법은 배열로 객체를 캐스팅하는 것 (작은 객체에 맞는) Log 클래스의 다른 로깅 메소드)는 string을 첫 번째 param으로 받아 들여 배열을 전달합니다.

그래서 대답은 로그 작성자 클래스에 깊이 설명되어 있습니다. 이 메시지 포맷을 지원하기 위해 때마다 호출되는 방법이며, 그것은 다음과 같습니다

또한
/** 
* 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; 
} 

것을 조금 더 명확히하기 위해, 당신은에 좀 걸릴 수 있습니다 https://github.com/laravel/framework/blob/5.4/src/Illuminate/Log/Writer.php#L199을하고 볼을 formateMessage 메소드는 매번 메시지를 형식화합니다.

관련 문제