[英]Configure PHP Monolog to log to Amazon S3 via stream
我們使用Monolog來記錄我們的服務器端PHP工作者腳本的輸出,這些腳本在Amazon Elastic Beanstalk EC2服務器實例上執行。 訪問日志文件相當困難,特別是考慮到服務器在擴展需求變化時啟動和關閉。
如何配置Monolog以直接登錄到Amazon S3流/存儲桶?
到目前為止,我在我的Pimple依賴注入定義中嘗試這樣的事情:
$this->container['log'] = function ($c) {
$logger = new \Monolog\Logger('psd_worker');
$handler = new \Monolog\Handler\StreamHandler('s3://mybucket/logs/test.log');
$logger->pushHandler($handler);
return $logger;
};
但是沒有日志文件出現在存儲桶上,我也沒有得到任何例外。
一個小測試顯示我可以通過s3://寫入S3存儲桶:
$stream = fopen("s3://{$bucket}/{$key}", 'w');
fwrite($stream, 'Hello S3 World!');
fclose($stream);
但我希望Monologs記錄功能寫入此存儲桶。
管理以使其工作。 首先制作一個Amazon S3 DI服務,確保調用$s3_client->registerStreamWrapper()
:
$this->container['s3_client'] = function ($c) {
$s3_client = \Aws\S3\S3Client::factory([
'key' => Config::get('amazon_s3.key'),
'secret' => Config::get('amazon_s3.secret')
]);
$s3_client->registerStreamWrapper();
return $s3_client;
};
然后是記錄器,它應調用s3_client以確保進行流包裝器注冊:
$this->container['log'] = function ($c) {
$this->container['s3_client'];
$logger = new \Monolog\Logger('psd_worker');
$handler = new \Monolog\Handler\StreamHandler("s3://mybucket/logs/monolog_s3.log");
$logger->pushHandler($handler);
return $logger;
};
然后,在調用記錄器的日志記錄方法時:
$log = $this->container['log'];
$log->info("Another from Monolog to Amazon S3!!!");
將導致數據寫入配置的存儲桶。 看來數據只在調用fclose()
時寫入,能夠看到日志生長會很好,但我猜這需要套接字方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.