이 글의 예시에서는 laravel의 오류 및 로그 사용법을 설명합니다. 참고하실 수 있도록 모두와 공유해 주세요. 자세한 내용은 다음과 같습니다.
로그
라라벨의 로그인은 모노로그를 기반으로 캡슐화되어 있습니다. Laravel은 이에 대해 여러 가지 작업을 수행했습니다.
① 모노로그의 addInfo와 같은 기능을 info와 같은 기능으로 단순화했습니다.
② 로깅을 활성화하기 위해 useFiles 및 useDailyFiles라는 두 개의 매개변수를 추가했습니다. 관리 및 자르기가 더 쉬워졌습니다.
③ monolog 메소드를 호출하려면 callMonolog 함수를 호출해야 합니다
다음 요구 사항을 어떻게 구현하는지 살펴보겠습니다.
은 다를 것입니다. 로그 정보는 서로 다른 로그에 저장됩니다
이 요구 사항은 매우 일반적입니다. 예를 들어 주문 호출 로그는 order.log에 기록되어야 하고 매장 정보를 얻은 기록은 상점에 기록되어야 합니다. 통나무. 이렇게 할 수 있습니다:
<?php use Monolog\Logger; use Monolog\Handler\StreamHandler; use Illuminate\Log\Writer; class BLogger { // 所有的LOG都要求在这里注册 const LOG_ERROR = 'error'; private static $loggers = array(); // 获取一个实例 public static function getLogger($type = self::LOG_ERROR, $day = 30) { if (empty(self::$loggers[$type])) { self::$loggers[$type] = new Writer(new Logger($type)); self::$loggers[$type]->useDailyFiles(storage_path().'/logs/'. $type .'.log', $day); } $log = self::$loggers[$type]; return $log; } }
이런 방식으로 다양한 로그 데이터가 다양한 로그 파일에 저장됩니다. 로그 데이터 정보도 기록할 수 있습니다.
Laravel의 오류 로그 스택이 너무 깁니다. 어떻게 해야 하나요?
위의 Blogger 클래스를 사용하여 start/global.php에 필요한 오류 정보를 기록하세요.
// 错误日志信息 App::error(function(Exception $exception, $code) { Log::error($exception); $err = [ 'message' => $exception->getMessage(), 'file' => $exception->getFile(), 'line' => $exception->getLine(), 'code' => $exception->getCode(), 'url' => Request::url(), 'input' => Input::all(), ]; BLogger::getLogger(BLogger::LOG_ERROR)->error($err); });
Laravel의 기본 로그가 존재하지 않습니다. 분할
을 사용하면 laravel의 기본 로깅이 기본적으로 분할로 변경되어야 합니다.
start/global.php에도
Log::useDailyFiles(storage_path().'/logs/laravel.log', 30);
요청의 SQL 로그를 기록하는 방법
이것 좀 더 자세히 물어보시려면 실시간으로 녹음하시겠습니까?
실시간 기록을 원하지 않는 경우 laravel에는 앱 요청으로 얻은 SQL 요청을 가져오는 DB::getQueryLog가 있습니다.
## 在filters.php中 App::after(function($request, $response) { // 数据库查询进行日志 $queries = DB::getQueryLog(); if (Config::get('query.log', false)) { BLogger::getLogger('query')->info($queries); } }
실시간으로 녹화해야 하는 경우(즉, 어디서든 죽으면 이전 페이지의 sql 요청도 녹화됨), illuminate.query 이벤트를 들어야 합니다
// 数据库实时请求的日志 if (Config::get('database.log', false)) { Event::listen('illuminate.query', function($query, $bindings, $time, $name) { $data = compact('query','bindings', 'time', 'name'); BLogger::getLogger(BLogger::LOG_QUERY_REAL_TIME)->info($data); }); }
오류
laravel의 모든 오류는 전역 App::error를 거쳐 다시 나타납니다
예를 들어, 인터페이스를 디자인하는 경우에도 오류가 발생하여 json 데이터가 반환되면 다음과 같이 할 수 있기를 바랍니다.
// 错误日志信息 App::error(function(Exception $exception, $code) { // 如果没有路径就直接跳转到登录页面 if ($exception instanceof NotFoundHttpException) { return Redirect::route('login'); } Log::error($exception); $err = [ 'message' => $exception->getMessage(), 'file' => $exception->getFile(), 'line' => $exception->getLine(), 'code' => $exception->getCode(), 'url' => Request::url(), 'input' => Input::all(), ]; BLogger::getLogger(BLogger::LOG_ERROR)->error($err); $response = [ 'status' => 0, 'error' => "服务器内部错误", ]; return Response::json($response); });
404 오류도 잡고 싶습니다:
App::missing(function($exception) { $response = [ 'status' => 0, 'error' => "请求路径错误", ]; return Response::json($response); });
이 글이 Laravel 프레임워크를 기반으로 하는 모든 사람의 PHP 프로그램 설계에 도움이 되기를 바랍니다.
laravel의 오류 및 로그 사용법에 대한 자세한 설명은 PHP 중국어 홈페이지를 참고해주세요!