我已经浏览了文档,找不到更改任何错误的日志记录的方法,这些错误通常会写入/app/storage/logs/logs/log-apache2handler-xxxx-xx-xx.txt
但在生产服务器上,我希望将其中任何一个通过电子邮件发送给我。
有没有办法做到这一点?
我仍然记录错误,如果是生产,请发送一封电子邮件,但有例外:
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);
}
});
由于Laravel在内部使用Monolog库,我认为使用预期的日志处理程序是一个更好的解决方案。因此,Log的每个未捕获的异常和手动调用都将发送到您的邮件地址。
如果您使用的是 mail()
将 NativeMailerHandler 添加到您的应用程序/开始/全局.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:
(Swift Mailer也被Laravel内部使用)
$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
App::error(function(Exception $exception)
{
//Log::error($exception);
// send email
});
在此处查看文档:http://laravel.com/docs/errors#handling-errors
基本上,这取决于您在处理程序中放入什么逻辑。我认为也可以为生产创建一个单独的全局.php,而无需放置 if-else 语句来找出您所在的环境。
使用类似包
首先通过 Composer 安装此软件包。编辑项目的 composer.json 文件以需要 dinesh/bugonemail。
或访问
http://dineshrabara.github.io/bugonemail/