在Laravel日志中记录PHP异常

在Laravel日志中记录PHP异常,php,exception,logging,laravel,Php,Exception,Logging,Laravel,我开始在Laravel 4中为我的应用程序创建一个自定义日志功能,对于自定义消息,一切都很好,但是当我尝试在try..catch(exception$e)中记录异常消息时,不会将此异常写入日志文件 <?php namespace Api\ApplicationEvents; use Monolog\Logger; use Monolog\Handler\StreamHandler; class LogWritter { public static function write

我开始在Laravel 4中为我的应用程序创建一个自定义日志功能,对于自定义消息,一切都很好,但是当我尝试在
try..catch(exception$e)
中记录异常消息时,不会将此异常写入日志文件

<?php namespace Api\ApplicationEvents;

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

class LogWritter {

    public static function write( $logMessage, $logLevel)
    {
        $date = date('d_m_y');

        $logFile = public_path() . '\logs\log_' . $date . '.log';

        if ( !file_exists($logFile)) {
            $fp = fopen($logFile, 'w');
            fwrite($fp, '');
            fclose($fp);
        }

        $log = new Logger('Menu App Log: ');

        switch ($logLevel) {
            case 'Info':
                $log->pushHandler( new StreamHandler($logFile, Logger::INFO) ); 
                break;

            case 'Warn':
                $log->pushHandler( new StreamHandler($logFile, Logger::WARNING) ); 
                break;

            case 'Error':
                $log->pushHandler( new StreamHandler($logFile, Logger::ERROR) ); 
                break;
        }

        $log->addInfo($logMessage);
    }
}
?>
但目前无法在日志文件中写入异常消息


有人能帮我把这件事做好吗,我做错了什么?

你试过测试你的
Api\ApplicationEvents\logwriter::write($exception,'Error')隔离代码

e、 g.试着用这个测试你的代码是否有效

try { 
  throw new RuntimeException() 
} catch (Exception $e) {
   $exception = $e->getMessage();
   Api\ApplicationEvents\LogWritter::write( $exception, 'Error');
}
如果这很好,你就知道你的类和方法没有问题

编辑:

试试这个:

switch ($logLevel) {
    case 'Warn':
        $log->pushHandler( new StreamHandler($logFile, Logger::WARNING) ); 
        $log->addWarning($logMessage);
        break;

    case 'Error':
        $log->pushHandler( new StreamHandler($logFile, Logger::ERROR) ); 
        $log->addError($logMessage);            
        break;

    default:
        $log->pushHandler( new StreamHandler($logFile, Logger::INFO) ); 
        $log->addInfo($logMessage);
}

这里的问题是,为什么当我
尝试{..}catch(异常$e){echo$e->getMessage();}
在浏览器输出中显示异常时,获取异常并将其发送到我的日志函数应该是不同的?您的开关中没有默认值。这可能会导致一个问题,好像它找不到一个开关,你不会有一个推处理程序设置
switch ($logLevel) {
    case 'Warn':
        $log->pushHandler( new StreamHandler($logFile, Logger::WARNING) ); 
        $log->addWarning($logMessage);
        break;

    case 'Error':
        $log->pushHandler( new StreamHandler($logFile, Logger::ERROR) ); 
        $log->addError($logMessage);            
        break;

    default:
        $log->pushHandler( new StreamHandler($logFile, Logger::INFO) ); 
        $log->addInfo($logMessage);
}