最近,我正在開發一個高并發 web 應用,需要一個可靠的日志系統來監控應用的運行狀態和排查潛在問題。 最初,我使用簡單的文件日志記錄,但隨著用戶數量的增加,日志文件變得越來越大,查找特定信息也變得越來越困難。更重要的是,這種方法難以實現對日志的集中管理和分析。
我需要一個更強大的日志解決方案,能夠將日志數據集中存儲,并提供便捷的分析工具。Google Cloud Platform 的 Stackdriver Logging 正好滿足我的需求。它提供了一個強大的日志管理平臺,支持多種日志格式和強大的搜索、分析功能。但是,如何將我的 php 應用的日志發送到 Stackdriver 呢?
這時,我找到了 netflie/monolog-stackdriver-handler 這個 composer 包。它是一個 Monolog 的 Handler,可以方便地將日志數據發送到 Stackdriver Logging。Monolog 本身是一個流行的 PHP 日志庫,提供了靈活的日志處理機制。
安裝 netflie/monolog-stackdriver-handler 非常簡單,只需使用 Composer:
composer require netflie/monolog-stackdriver-handler
接下來,需要配置 Handler 來連接 Stackdriver Logging。這需要一個 Google Cloud Service Account 的密鑰文件。 你可以從 Google Cloud console 中創建并下載這個文件。 記住將 /path/to/service-account-key-file.json 替換成你實際密鑰文件的路徑。
require 'vendor/autoload.php';use NetflieMonologStackdriverHandlerMonologStackdriverHandler;use MonologLogger;$loggingClientOptions = [ 'keyFilePath' => '/path/to/service-account-key-file.json'];$monologStackdriverHandler = new MonologStackdriverHandler('my_log', $loggingClientOptions);$monologLogger = new Logger('name');$monologLogger->pushHandler($monologStackdriverHandler);// Send records to Google Stackdriver Logging$monologLogger->notice('Foo');$monologLogger->error('Bar');
這段代碼創建了一個 Monolog Logger 實例,并添加了 MonologStackdriverHandler。 ‘my_log’ 是日志名稱,你可以根據需要修改。
為了進一步優化性能,我們可以啟用批量處理功能,將多個日志記錄合并成一個請求發送到 Stackdriver,從而減少網絡請求次數和延遲:
$loggerOptions = [ 'batchEnabled' => true,];$monologStackdriverHandler = new MonologStackdriverHandler( 'my_log', $loggingClientOptions, $loggerOptions);
通過簡單的配置,我成功地將應用日志發送到 Stackdriver Logging。在 Stackdriver Logging 的界面上,我可以方便地查看、搜索和分析日志數據,這極大地提高了我的開發效率和問題排查能力。 而且,批量處理功能顯著降低了日志記錄的延遲,對高并發應用非常友好。 這相比之前的文件日志記錄方法,效率提升非常明顯,并且擁有更強大的日志管理和分析能力。 對于需要高效日志管理的應用,強烈推薦使用 Monolog 和 netflie/monolog-stackdriver-handler。 如果你想學習更多關于 Composer 的知識,可以參考這個在線學習地址:學習地址。