mediasuite / silverstripe-logging-elasticsearch
monolog公共日志处理程序的修改版本,允许Elastic Search与Silverstripe 4项目和云上最新的elasticsearch版本协同工作。
Requires
- php: >=7.4
- monolog/monolog: ^1
- ruflin/elastica: ^7
This package is auto-updated.
Last update: 2024-09-10 05:28:38 UTC
README
Silverstripe默认使用名为monolog的包作为其“即用型”日志解决方案。Monolog在多个框架中用于PHP日志,并且支持良好。
您可以从一个连接到各种日志方法接口的文件夹中选择处理程序,例如将日志流到一个Slack频道、写入日志文件(最常见的方法)、写入数据库等。
其中之一是为ElasticSearch设计的处理程序。然而,由于SS4对monolog v1.2.7.1的要求,存在一些小问题。
工作原理
我们有一个monolog包,它用于将SS特定的框架内部错误/日志转换为PSR4兼容的标准,然后将其传递给处理请求/响应到ElasticSearch云实例的客户端。
此客户端是一个名为elastica的包,它将monolog的日志输出绑定到一个curl请求,该请求指向云实例。另一个在PHP社区中非常流行的代码库。虽然在monolog的后续版本中似乎是多余的。
在Silverstripe 5中,我们可以使用monolog v3.4.1,该版本可以原生地使用ElasticSearch提供的API处理所有这些操作。这将减轻对解决方案中描述的自定义代码的需求。
较早版本的elastica与Cloud ES API不兼容。然而,升级elastica会与较早版本的monolog v1.2.1.7代码库产生问题。
最值得注意的是,“代码格式化器”引用了现在已弃用并从elastica代码库中删除的方法。
安装
composer require mediasuite/silverstripe-logging-elasticsearch
将以下代码片段添加到您的_config.php中,并使用基于您的ES云实例配置在.env中设置3个环境变量
app/_config.php
$logger = Injector::inst()->get(LoggerInterface::class);
if ($logger instanceof Logger
&& Environment::getEnv('ELASTIC_SEARCH_INDEX')
&& Environment::getEnv('ELASTIC_SEARCH_HOST')
&& Environment::getEnv('ELASTIC_SEARCH_APIKEY')) {
$options = array(
'index' => Environment::getEnv('ELASTIC_SEARCH_INDEX') // Elastic index name
);
$config = [
'connections' => [
[ 'host' => Environment::getEnv('ELASTIC_SEARCH_HOST'),
'port' => 443,
'transport' => 'Https',
'headers' => [
'Authorization' => 'ApiKey' . Environment::getEnv('ELASTIC_SEARCH_APIKEY')
]
]
]
];
$client = new Client($config);
$handler = new CustomESHandler($client, $options);
$logger->pushHandler($handler);
}