【问题标题】:Log PHP exceptions in Laravel Log在 Laravel 日志中记录 PHP 异常
【发布时间】:2014-09-13 22:43:57
【问题描述】:

我开始在 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);
    }
}
?>

函数的调用是这样的:

try { 
// code goes here 
} catch (Exception $e) {
   $exception = $e->getMessage();
   Api\ApplicationEvents\LogWritter::write( $exception, 'Error');
}

但目前无法在日志文件中写入异常消息

有人可以帮我解决这个问题吗,我做错了什么?

【问题讨论】:

    标签: php exception logging laravel


    【解决方案1】:

    您是否尝试过单独测试您的 Api\ApplicationEvents\LogWritter::write( $exception, 'Error'); 代码?

    例如试试这个来测试你的代码是否有效

    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);
    }
    

    【讨论】:

    • 这里的问题是为什么当我try { .. } catch(Exception $e) { echo $e-&gt;getMessage(); } 在浏览器输出中显示异常?,这不应该是相同的获取异常并将其发送到我的日志函数?
    • 您的交换机中没有默认值。这可能会导致一个问题,好像它找不到你不会设置推送处理程序的开关
    猜你喜欢
    • 2011-10-23
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多