我正在尝试为laravel应用程序编写一个自定义日志,因为该应用程序非常大,所以我想组织我的日志文件。
问题是,如果在任何时候应用程序出错,它都会像php一样写入laravel.log
文件并杀死该脚本。
例如,我有一个像这样的自定义日志库
<?php
namespace App\Libraries\Logs;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Log;
class CustomLogsLibrary {
public function userError($error){
$orderLog = new Logger('users');
$orderLog->pushHandler(new StreamHandler(storage_path('logs/users.log')), Logger::INFO);
$orderLog->info('Error 1', $error);
}
}
然后如果这是我的脚本
$user = new User;
$user->nae = $request->name; //Name spelt wrong on purpose
$user->email = $request->email;
$user->password = bcrypt($request->password);
if(!$user->save()){
$errorCode = (new CustomLogsLibrary)->userError($user->save());
}
您可能会看到,我在用户对象中拼错了“名称”,从而导致错误。
Laravel随后在拼写错误的名称和死亡上出错,这意味着它实际上从未到达我的自定义日志功能,而是记录了日志
找不到列:1054“字段列表”中的未知列“ nme”
到laravel.log
,然后死亡。我知道如果返回false
,它将击中函数,但是当不返回false且由于其他原因导致函数错误时,我仍然想将其记录在自定义文件中。
我该如何解决?
我希望能够将所有错误整理到单独的文件中,并优先于标准laravel.log
文件写入这些文件。
答案 0 :(得分:0)
您需要在位于render()
的Laravel Handler
类的app/Exceptions/Handler.php
方法中添加自定义记录器。
类似这样的事情应该可以解决:
public function render($request, Exception $exception)
{
$error = (new CustomLogsLibrary)->userError($exception->getMessage());
return parent::render($request, $exception);
}
我确实有2条建议:
CustomLogsLibrary::userError('Error message')