>  기사  >  백엔드 개발  >  laravel_php 예제의 오류 및 로그 사용에 대한 자세한 설명

laravel_php 예제의 오류 및 로그 사용에 대한 자세한 설명

WBOY
WBOY원래의
2016-08-17 13:02:43896검색

이 글의 예시에서는 laravel의 오류 및 로그 사용법을 설명합니다. 참고하실 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

로그

라라벨의 로그인은 모노로그를 기반으로 캡슐화되어 있습니다. laravel은 이에 대해 여러 가지 작업을 수행합니다:

① 모노로그의 addInfo 등의 기능을 info 등의 기능으로 단순화

② useFiles 및 useDailyFiles라는 두 개의 매개변수를 추가하여 로그 관리 및 잘라내기가 더 쉬워졌습니다.

③ monolog 메소드를 호출하려면 callMonolog 함수를 호출해야 합니다

다음 요구 사항을 구현하는 방법을 살펴보겠습니다.

다른 로그에 다른 로그 정보 저장

이 요구사항은 매우 일반적입니다. 예를 들어 주문 호출 로그는 order.log에 기록되어야 하고, 매장 정보 획득 기록은 shop.log에 기록되어야 합니다. 이렇게 할 수 있습니다:

<&#63;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에 대한 더 많은 정보에 관심이 있는 독자는 이 사이트의 특별 주제인 "Laravel 프레임워크 소개 및 고급 튜토리얼", "PHP 우수 개발 프레임워크 요약", "Smarty 템플릿 시작에 대한 기본 튜토리얼"을 확인할 수 있습니다. ", "php 날짜 및 시간" 사용법 요약", "php 객체지향 프로그래밍 입문 튜토리얼", "php 문자열(문자열) 사용법 요약", "php+mysql 데이터베이스 조작 입문 튜토리얼" 및 "php 공통 데이터베이스 조작 기술 요약"

이 기사가 Laravel 프레임워크를 기반으로 하는 모든 사람의 PHP 프로그램 설계에 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.