>php教程 >PHP开发 >laravel의 오류 및 로그 사용법에 대한 자세한 설명

laravel의 오류 및 로그 사용법에 대한 자세한 설명

高洛峰
高洛峰원래의
2016-12-23 17:21:341402검색

이 글의 예시에서는 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 = &#39;error&#39;;
  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().&#39;/logs/&#39;. $type .&#39;.log&#39;, $day);
    }
    $log = self::$loggers[$type];
    return $log;
  }
}

이런 방식으로 다양한 로그 데이터가 다양한 로그 파일에 저장됩니다. 로그 데이터 정보도 기록할 수 있습니다.

Laravel의 오류 로그 스택이 너무 깁니다. 어떻게 해야 하나요?

위의 Blogger 클래스를 사용하여 start/global.php에 필요한 오류 정보를 기록하세요.

// 错误日志信息
App::error(function(Exception $exception, $code)
{
  Log::error($exception);
  $err = [
    &#39;message&#39; => $exception->getMessage(),
    &#39;file&#39; => $exception->getFile(),
    &#39;line&#39; => $exception->getLine(),
    &#39;code&#39; => $exception->getCode(),
    &#39;url&#39; => Request::url(),
    &#39;input&#39; => Input::all(),
  ];
  BLogger::getLogger(BLogger::LOG_ERROR)->error($err);
});

Laravel의 기본 로그가 존재하지 않습니다. 분할

을 사용하면 laravel의 기본 로깅이 기본적으로 분할로 변경되어야 합니다.

start/global.php에도

Log::useDailyFiles(storage_path().&#39;/logs/laravel.log&#39;, 30);

요청의 SQL 로그를 기록하는 방법

이것 좀 더 자세히 물어보시려면 실시간으로 녹음하시겠습니까?

실시간 기록을 원하지 않는 경우 laravel에는 앱 요청으로 얻은 SQL 요청을 가져오는 DB::getQueryLog가 있습니다.

## 在filters.php中
App::after(function($request, $response)
{
  // 数据库查询进行日志
  $queries = DB::getQueryLog();
  if (Config::get(&#39;query.log&#39;, false)) {
    BLogger::getLogger(&#39;query&#39;)->info($queries);
  }
}

실시간으로 녹화해야 하는 경우(즉, 어디서든 죽으면 이전 페이지의 sql 요청도 녹화됨), illuminate.query 이벤트를 들어야 합니다

// 数据库实时请求的日志
if (Config::get(&#39;database.log&#39;, false))
{
  Event::listen(&#39;illuminate.query&#39;, function($query, $bindings, $time, $name)
  {
    $data = compact(&#39;query&#39;,&#39;bindings&#39;, &#39;time&#39;, &#39;name&#39;);
    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(&#39;login&#39;);
  }
  Log::error($exception);
  $err = [
    &#39;message&#39; => $exception->getMessage(),
    &#39;file&#39; => $exception->getFile(),
    &#39;line&#39; => $exception->getLine(),
    &#39;code&#39; => $exception->getCode(),
    &#39;url&#39; => Request::url(),
    &#39;input&#39; => Input::all(),
  ];
  BLogger::getLogger(BLogger::LOG_ERROR)->error($err);
  $response = [
    &#39;status&#39; => 0,
    &#39;error&#39; => "服务器内部错误",
  ];
  return Response::json($response);
});

404 오류도 잡고 싶습니다:

App::missing(function($exception)
{
  $response = [
    &#39;status&#39; => 0,
    &#39;error&#39; => "请求路径错误",
  ];
  return Response::json($response);
});

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

laravel의 오류 및 로그 사용법에 대한 자세한 설명은 PHP 중국어 홈페이지를 참고해주세요!

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