10

我查看了文档,但找不到更改任何错误日志记录的方法,这些错误通常写入 /app/storage/logs/logs/log-apache2handler-xxxx-xx-xx.txt

但是在生产服务器上,我希望将其中的任何一个通过电子邮件发送给我。

有没有办法做到这一点?

4

4 回答 4

18

我仍然记录错误,如果它是生产的,请发送一封电子邮件,但有例外:

App::error(function(Exception $exception, $code)
{
Log::error($exception);

if (Config::getEnvironment() == 'production')
{
    $data = array('exception' => $exception);
    Mail::send('emails.error', $data, function($message)
    {
        $message->from($email_app);
        $message->to(Config::get('settings.error_email'))->subject(Config::get('settings.app_name') . ' Error');
    });
    Log::info('Error Email sent to ' . Config::get('settings.error_email'));
    return Response::view('errors.500', array(), 500);
}
});
于 2013-10-20T18:05:40.953 回答
5

由于 Laravel 在内部使用 Monolog 库,我认为使用预期的日志处理程序是一个更好的解决方案。因此,每个未捕获的异常和手动调用 Log 都将发送到您的邮件地址。

如果您使用的是 mail()

将 NativeMailerHandler 添加到您的 app/start/global.php:

$logFile = 'log-'.php_sapi_name().'.txt';

Log::useDailyFiles(storage_path().'/logs/'.$logFile);
Log::getMonolog()->pushHandler(
    new Monolog\Handler\NativeMailerHandler(
        'to@domain.de',
        '[Log] Some Subject',
        'from@domain.de'
        Logger::ERROR, // set minimal log lvl for mail
        true, // bubble to next handler?
        70 // max column width in your mail
    )
);

如果你已经配置了 Laravel SMTP 邮件

将 SwiftMailerHandler 添加到您的 app/start/global.php:

(Laravel 内部也使用了 Swift Mailer)

$logFile = 'log-'.php_sapi_name().'.txt';

Log::useDailyFiles(storage_path().'/logs/'.$logFile);
Log::getMonolog()->pushHandler(
    new Monolog\Handler\SwiftMailerHandler(
        Mail::getSwiftMailer(),
        Swift_Message::newInstance('[Log] Some Subject')->setFrom('from@domain.de')->setTo('to@domain.de'),
        Logger::ERROR, // set minimal log lvl for mail
        true // bubble to next handler?
    )
);

如果需要,请按照另一篇文章中的说明添加环境检查。对于许多其他处理程序,还可以查看https://github.com/seldaek/monolog

于 2015-03-03T22:15:54.350 回答
2
App::error(function(Exception $exception)
{
    //Log::error($exception);
    // send email
});

在此处查看文档:http: //laravel.com/docs/errors#handling-errors

基本上由你决定在处理程序中放置什么逻辑。我认为也可以为生产创建一个单独的 global.php,而无需使用 if-else 语句来找出您所在的环境。

于 2013-10-18T20:10:29.527 回答
1

使用类似的包

首先通过 Composer 安装这个包。编辑项目的 composer.json 文件以要求 dinesh/bugonemail。

或访问

http://dineshrabara.github.io/bugonemail/

于 2014-06-09T07:11:29.843 回答