2017-10-18 13 views
0

내 웹 사이트는 Slim Framework V3를 기반으로 작성되었으며 Monolog를 사용합니다. 내 웹 사이트 (오류 위의 모든 로그 메시지)에서 문제가 발생하면 이메일 알림을 받고 싶습니다. 즉, 중요한, 경고 또는 긴급 메시지가 기록되는시기를 알고 싶습니다.Slim 및 Monolog에서 오류가 발생하면 로그 세부 정보가 포함 된 전자 메일을 얻는 방법

이상적으로는 디버그하기 쉽도록 동일한 전자 메일에서도 오류가 발생하기 직전에 로그를 가져오고 싶습니다.

이것은 내 현재의 독백 구성 (슬림 기본값) :

// monolog 
$container['logger'] = function ($c) { 
    /** @var \Slim\Container $c */ 
    $settings = $c->get('settings')['logger']; 
    $logger = new Monolog\Logger($settings['name']); 
    $logger->pushProcessor(new Monolog\Processor\UidProcessor()); 

    $logger->pushHandler(new Monolog\Handler\StreamHandler($settings['path'], $settings['level'])); 

    return $logger; 
} 

이가있는 로그 설정 : 나는 표준 StreamHandler를 포함하는 솔루션을 함께했다

return [ 
    // Monolog settings 
    'logger' => [ 
     'name' => 'slim-app', 
     'path' => __DIR__ . '/logs/' . $logDate->format('Y-m-d') . '_app.log', //TODO: Make sure logs are above DocumentRoot 
     'level' => \Monolog\Logger::DEBUG, 
    ] 
]; 

답변

0

NativeMailHandlerFingersCrossedHandler.

StreamHandler은 주어진 레벨 이상의 모든 항목을 기록하기 만하면됩니다.

이제 특정 수준의 오류가 발생했을 때 자세한 이메일을 얻으려면 NativeMailHandlerFingersCrossedHandler을 조합하는 것이 좋습니다.

: 그것은 monolog source code에 따르면

작동 방법

return [ 
    // Monolog settings 
    'logger' => [ 
     'name' => 'slim-app', 
     'path' => __DIR__ . '/logs/' . $logDate->format('Y-m-d') . '_app.log', //TODO: Make sure logs are above DocumentRoot 
     'level' => \Monolog\Logger::DEBUG, 
    ] 
]; 

FingersCrossedHandler는 다음을 수행합니다

// monolog 
$container['logger'] = function ($c) { 
    /** @var \Slim\Container $c */ 
    $settings = $c->get('settings')['logger']; 
    $logger = new Monolog\Logger($settings['name']); 
    $logger->pushProcessor(new Monolog\Processor\UidProcessor()); 

    $logger->pushHandler(new Monolog\Handler\StreamHandler($settings['path'], $settings['level'])); 

    //Handler to send email on critical (or above) errors 
    //Uses the FingersCrossed strategy which buffers all messages preceeding the critical error 
    $dt = new DateTime(); 
    $mailHandler = new Monolog\Handler\NativeMailerHandler(
     '[email protected]', //TODO: The email address where to send emails 
     '[ERROR] : Unexpected error happened that requires immediate attention ' . $dt->format('Y-m-d'), 
     '[email protected]', 
     $settings['level'], 
     true, 
     2000 
    ); 
    $logger->pushHandler(new Monolog\Handler\FingersCrossedHandler($mailHandler, Monolog\Logger::CRITICAL)); 

    return $logger; 
}; 

이들은 (settings.php에서) 내 로거 설정은 다음과 같습니다

실제로 오류를 유발하는 요청 만 또는 (또는 actionLevel이 무엇이든) 로그에 있지만 레벨 임계 값 이상인 모든 레코드가 포함됩니다. 중요한 이상의 수준 메시지가 호출 될 때

따라서이 문장은 우리 NativeMailerHandler가 FingersCrossedHandler에 의해 사용되어 있는지 확인합니다 :

new Monolog\Handler\FingersCrossedHandler($mailHandler, Monolog\Logger::CRITICAL) 

희망이 누군가를하는 데 도움이!