ドキュメントに目を通しましたが、通常は /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() を使用している場合
app/start/global.php に NativeMailerHandler を追加します。
$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 Mailing を設定した場合
app/start/global.php に SwiftMailerHandler を追加します。
(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もご覧ください。