搜尋
首頁php框架LaravelLaravel5.5中如何自訂日誌行為的解析

Laravel5.5中如何自訂日誌行為的解析

Aug 02, 2018 pm 05:32 PM
laravel紀錄

這篇文章給大家分享的內容是關於Laravel5.5中如何自訂日誌行為的解析,內容很詳細,有一定的參考價值,希望可以幫助到有需要的朋友。

在Laravel 5.6 版本中日誌行為可以很容易的進行自定義,而在5.5以下版本中日誌行為自訂自由度並不是很高,但是專案有需求不能因為這個就強行將專案升級為5.6吧,況且作為一個穩定的專案升級框架大版本有可能會有很多坑,基於這些原因我嘗試了對Laravel 5.5 的日誌進行改造以適應我的需求。

Laravel 的日誌行為大部分是在Illuminate\Log\LogServiceProvider 中,我們可以看一下其中的程式碼片段:

/**
 * 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 的providers 數組中,但是這種行為並不可行,因為透過查看源碼, LogServiceProvider 是在框架啟動時就註冊。

有這樣一個方法控制了這個註冊行為:

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

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

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

既然我們知道了它們是如何生效的,那麼我們將這兩個類別繼承並修改其中我們需要改變的行為進行改造,我的改造方式如下。在app\Providers 中新建LogServiceProvider 類別繼承Illuminate\Log\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;)),

app目錄中新建Foundation 目錄,新建Application 類別繼承Illuminate\Foundation\Application 類,重寫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));
 }
}

說是重寫其實只是將use類別換從了我們自己建立的 LogServiceProvider 。

然後在 bootstrap\app.php 中將變數 $app 的 new 物件換成我們繼承重寫後的。

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

這樣我就成功的將日誌路徑可以隨便定義了,而且來說有了這次經驗我對於框架不符合我需求的地方可以做更進一步的優化以符合我的要求,而且我沒有更改框架底層的程式碼,當框架有bug修復的時候我也可以放心的進行框架更新。

相關文章推薦:

php 自訂錯誤日誌實例詳解

#Yii2 自訂日誌檔案寫入日誌

以上是Laravel5.5中如何自訂日誌行為的解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Laravel的全堆棧開發:管理API和前端邏輯Laravel的全堆棧開發:管理API和前端邏輯Apr 28, 2025 am 12:22 AM

在Laravel全棧開發中,管理API和前端邏輯的有效方法包括:1)使用RESTful控制器和資源路由管理API;2)通過Blade模板和Vue.js或React處理前端邏輯;3)通過API版本控制和分頁優化性能;4)保持後端和前端邏輯分離,確保可維護性和可擴展性。

翻譯失落:分佈式團隊中的文化細微差別和誤解翻譯失落:分佈式團隊中的文化細微差別和誤解Apr 28, 2025 am 12:22 AM

TotackleculturalIntricaciesIndistributedTeams,fosteranenvironmentcelebratingDifferences,BemindfulofCommunication,andusetoolsforclarity.1)ImpartimentCulturalexchangessessionStossessessionStosharestories andraditions.2)

測量連接:分析和見解遠程通信有效性測量連接:分析和見解遠程通信有效性Apr 28, 2025 am 12:16 AM

Toassesstheeffectivenessofremotecommunication,focuson:1)Engagementmetricslikemessagefrequencyandresponsetime,2)Sentimentanalysistogaugeemotionaltone,3)Meetingeffectivenessthroughattendanceandactionitems,and4)Networkanalysistounderstandcommunicationpa

分佈式團隊中的安全風險:保護偏遠世界中的數據分佈式團隊中的安全風險:保護偏遠世界中的數據Apr 28, 2025 am 12:11 AM

toprotectsentiveDatainDistributedTeams,實現的 - 擬合方法:1)使用EndEnd-to-endencryptignterforsecuroCommunication,2)基於applyrole的acccessControl(rbac)tomanagepermissions,3),3)costerrestdataatrestdataatrestwithkeymanagementtools,and4)

超越電子郵件:探索現代溝通平台以進行遠程協作超越電子郵件:探索現代溝通平台以進行遠程協作Apr 28, 2025 am 12:03 AM

不,emailisnotthebostforremotecollaborationtoday.modern PlatformLack,Microsoft Teams,Zoom,Asana和Trellofferreal時間通信,項目管理,項目管理和IntintegrationFeatureSthanCteAncteAncteAmworkworkesseffiquice。

協作文檔編輯:簡化分佈式團隊中的工作流程協作文檔編輯:簡化分佈式團隊中的工作流程Apr 27, 2025 am 12:21 AM

協作文檔編輯是分佈式團隊優化工作流程的有效工具。它通過實時協作和反饋循環提升溝通和項目進度,常用工具包括GoogleDocs、MicrosoftTeams和Notion。使用時需注意版本控制和學習曲線等挑戰。

以前的Laravel版本將得到多長時間?以前的Laravel版本將得到多長時間?Apr 27, 2025 am 12:17 AM

ThepreviousversionofLaravelissupportedwithbugfixesforsixmonthsandsecurityfixesforoneyearafteranewmajorversion'srelease.Understandingthissupporttimelineiscrucialforplanningupgrades,ensuringprojectstability,andleveragingnewfeaturesandsecurityenhancemen

利用Laravel的功能來為前端開發和後端開發利用Laravel的功能來為前端開發和後端開發Apr 27, 2025 am 12:16 AM

Laravelcanbeeffectivelyusedforbothfrontendandbackenddevelopment.1)Backend:UtilizeLaravel'sEloquentORMforsimplifieddatabaseinteractions.2)Frontend:LeverageBladetemplatesforcleanHTMLandintegrateVue.jsfordynamicSPAs,ensuringseamlessfrontend-backendinteg

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器