>  기사  >  PHP 프레임워크  >  laravel의 오류 및 로그 정보

laravel의 오류 및 로그 정보

藏色散人
藏色散人원래의
2021-04-09 13:46:332301검색

다음 튜토리얼 칼럼인 laravel에서는 laravel의 오류와 로그를 소개합니다(로그 디렉터리와 로그 파일 이름을 사용자 정의할 수 있습니다). 도움이 필요한 친구들에게 도움이 되길 바랍니다!

laravel의 오류 및 로그 정보

Log

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

  • 모노로그의 addInfo와 같은 함수를 info와 같은 함수로 단순화했습니다.
  • 두 개의 매개변수 useFiles 및 useDailyFiles를 추가하여 로그 관리 및 잘라내기가 더 쉬워졌습니다.
  • 모노로그 메소드를 호출하려면 다음이 필요합니다. callMonolog 함수 호출

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

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

이 요구 사항은 주문 호출과 같이 매우 일반적입니다. 로그는 order.log에 기록되어야 합니다. , 매장 정보를 획득한 기록은 shop.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().'/logs/laravel.log', 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);
    });
}

Error

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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