mediasuite / silverstripe-logging-elasticsearch

关于此包的最新版本(dev-master)没有可用的许可信息。

monolog公共日志处理程序的修改版本,允许Elastic Search与Silverstripe 4项目和云上最新的elasticsearch版本协同工作。

dev-master 2023-07-10 03:00 UTC

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);
}