>  기사  >  PHP 프레임워크  >  Laravel5.5에서 로그 동작 분석을 사용자 정의하는 방법

Laravel5.5에서 로그 동작 분석을 사용자 정의하는 방법

不言
不言원래의
2018-08-02 17:32:033045검색

이 글의 내용은 Laravel5.5에서 로그 동작을 사용자 정의하는 방법에 대한 분석을 공유하는 것입니다. 내용은 매우 상세하며 도움이 필요한 친구들에게 도움이 되기를 바랍니다.

Laravel 5.6 버전에서는 로그 동작을 쉽게 커스터마이징할 수 있는 반면, 5.5 이하 버전에서는 로그 동작을 커스터마이징하는 자유도가 그다지 높지 않지만 프로젝트에 필요한 경우 프로젝트를 강제로 업그레이드할 수 없습니다. 5.6이라는 점 때문에 안정적인 프로젝트이기 때문에 대규모 버전의 프레임워크를 업그레이드하는 데에는 많은 함정이 있을 수 있습니다. 이러한 이유로 저는 Laravel 5.5의 로그를 제 요구에 맞게 변환하려고 했습니다.

Laravel의 로깅 동작은 대부분 IlluminateLogLogServiceProvider에 있습니다. 코드 조각을 살펴보면

/**
 * Configure the Monolog handlers for the application.
 *
 * @param \Illuminate\Log\Writer $log
 * @return void
 */
protected function configureDailyHandler(Writer $log)
{
 $log->useDailyFiles(
  $this->app->storagePath().'/logs/laravel.log', $this->maxFiles(),
  $this->logLevel()
 );
}

이것은 제가 프로젝트에서 가장 자주 사용하는 로그 저장 방법입니다. 로그 저장 경로가 쓰기와 거의 동일하다는 것을 알 수 있습니다. 불활성 상태는 외부 매개변수를 통해 쉽게 변경할 수 없습니다.

처음에는 이 Provider를 다시 작성하여 app.php의 공급자 배열에 등록하려고 생각했지만 소스 코드를 보면 프레임워크가 시작될 때 LogServiceProvider가 등록되어 있기 때문에 이 동작은 실현 가능하지 않습니다.

이 등록 동작을 제어하는 ​​방법이 있습니다:

protected function registerBaseServiceProviders()
{
 $this->register(new EventServiceProvider($this));

 $this->register(new LogServiceProvider($this));

 $this->register(new RoutingServiceProvider($this));
}

이제 어떻게 적용되는지 알았으므로 이 두 클래스를 상속하고 변경해야 하는 동작을 다음과 같이 수정하겠습니다. IlluminateLogLogServiceProvider를 상속하는 appProviders에 새 LogServiceProvider 클래스를 생성합니다. 코드는 다음과 같습니다:

<?php


namespace App\Providers;

use Illuminate\Log\LogServiceProvider as BaseLogServiceProvider;
use Illuminate\Log\Writer;

class LogServiceProvider extends BaseLogServiceProvider
{
 /**
  * Configure the Monolog handlers for the application.
  *
  * @param \Illuminate\Log\Writer $log
  * @return void
  */
 protected function configureDailyHandler(Writer $log)
 {
  $path = config(&#39;app.log_path&#39;);
  $log->useDailyFiles(
   $path, $this->maxFiles(),
   $this->logLevel()
  );
 }
}

config/app.php 디렉토리에 구성 추가:

&#39;log_path&#39; => env(&#39;APP_LOG_PATH&#39;, storage_path(&#39;/logs/laravel.log&#39;)),

앱 디렉토리에 새 Foundation 디렉토리를 생성하고, 새 애플리케이션을 생성합니다. IlluminateFoundationApplication 클래스를 상속하는 클래스이며,registerBaseServiceProviders 메소드를 재정의합니다.

<?php
/**
 * Created by PhpStorm.
 * User: dongyuxiang
 * Date: 2018/7/31
 * Time: 16:53
 */

namespace App\Foundation;

use App\Providers\LogServiceProvider;
use Illuminate\Events\EventServiceProvider;
use Illuminate\Routing\RoutingServiceProvider;
use Illuminate\Foundation\Application as BaseApplication;


class Application extends BaseApplication
{

 /**
  * Register all of the base service providers.
  *
  * @return void
  */
 protected function registerBaseServiceProviders()
 {
  $this->register(new EventServiceProvider($this));

  $this->register(new LogServiceProvider($this));

  $this->register(new RoutingServiceProvider($this));
 }
}

다시 작성했다고 하는데 실제로는 우리가 직접 만든 LogServiceProvider에서 사용 클래스를 변경한 것뿐입니다.

그런 다음 bootstrapapp.php에서 $app 변수의 새 개체를 상속하고 다시 작성한 개체로 바꿉니다.

$app = new App\Foundation\Application(
 realpath(__DIR__.&#39;/../&#39;)
);

이렇게 해서 자연스럽게 로그 경로를 정의하는 데 성공했고, 이 경험을 통해 프레임워크가 내 요구 사항을 충족하지 못하는 영역을 더욱 최적화할 수 있었고 프레임워크를 변경하지 않았습니다. 프레임워크에 버그 수정이 있으면 프레임워크를 안전하게 업데이트할 수 있습니다.

추천 관련 기사:

php 사용자 정의 오류 로그 예에 대한 자세한 설명

Yii2 사용자 정의 로그 파일 쓰기 로그

위 내용은 Laravel5.5에서 로그 동작 분석을 사용자 정의하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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