2017-10-18 19 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 
$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で)している:それは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は以下のん:

実際にエラーを引き起こすリクエストのみまたは(またはあなたの actionLevelが何であれ)ログに記録されますが、レベルしきい値を超えるものだけでなく、すべて レコードが含まれます。

したがって、このステートメントは重大以上のレベルのメッセージが呼び出されたときに、私たちのNativeMailerHandlerがFingersCrossedHandlerで使用されていることを確認します。

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

が、これは誰かに役立ちます願っています!

関連する問題