這篇文章給大家分享的內容是關於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('app.log_path'); $log->useDailyFiles( $path, $this->maxFiles(), $this->logLevel() ); } }
在config/app.php 目錄中新增設定:
'log_path' => env('APP_LOG_PATH', storage_path('/logs/laravel.log')),
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__.'/../') );
這樣我就成功的將日誌路徑可以隨便定義了,而且來說有了這次經驗我對於框架不符合我需求的地方可以做更進一步的優化以符合我的要求,而且我沒有更改框架底層的程式碼,當框架有bug修復的時候我也可以放心的進行框架更新。
相關文章推薦:
以上是Laravel5.5中如何自訂日誌行為的解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

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

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

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

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

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

ThepreviousversionofLaravelissupportedwithbugfixesforsixmonthsandsecurityfixesforoneyearafteranewmajorversion'srelease.Understandingthissupporttimelineiscrucialforplanningupgrades,ensuringprojectstability,andleveragingnewfeaturesandsecurityenhancemen

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

禪工作室 13.0.1
強大的PHP整合開發環境

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

SublimeText3漢化版
中文版,非常好用

Atom編輯器mac版下載
最受歡迎的的開源編輯器