eduzz / judas
这个库负责保存 Eduzz 应用程序的日志。
Requires
- php: >=7.0
- ext-bcmath: *
- ext-json: *
- ext-mbstring: *
- adbario/php-dot-notation: ^2.0
- eduzz/hermes: dev-master
Requires (Dev)
- php: >=5.6
- mockery/mockery: ^1.0
- phpunit/phpunit: ^7.0
This package is not auto-updated.
Last update: 2024-09-26 00:09:30 UTC
README
Judas 是一个日志库,是利用 Hermes 库将日志发送到 rabbitMQ 的实现,然后使用 store 方法将日志存储在 elasticSearch 中。
安装
首先,我们在 composer.json 文件中添加 Judas 和 Hermes 的依赖和仓库。
{ "require": { "eduzz/hermes": "dev-master", "eduzz/judas": "dev-master" }, "repositories": [ { "type": "vcs", "url": "git@bitbucket.org:eduzz/hermes.git" }, { "type": "vcs", "url": "git@bitbucket.org:eduzz/judas.git" } ] }
然后,我们运行以下命令:
composer dump-autoload
更新 composer 缓存。
composer install
安装依赖和 Judas。
PS:需要在运行 composer install 的 shell 中检查您的 bitbucket 密钥是否连接。
在 Laravel 项目中安装
下一步是将 Judas 注册到 service providers 列表中,在 config/app.php 中添加 Judas 到 providers 列表,并将 Judas facade 添加到 aliases 列表中。
'providers' => [ // ... Eduzz\Judas\JudasLaravelServiceProvider::class, ],
'aliases' => [ // ... 'Judas' => Eduzz\Judas\Facades\JudasFacade::class, ],
我们需要清理缓存,更新包并发布 Judas 的配置。
php artisan cache:config
composer update
php artisan vendor:publish --tag="config"
如果一切顺利,将显示以下消息。
Copied File [/vendor/eduzz/judas/src/Config/judas.php] To [/config/judas.php]
然后,需要在 config/judas.php 文件中配置 judas,例如在 elastic_connection、queue_connection 和 environment 变量中。
// Caso seja apenas store 'elastic_connection' => array( 'host' => env('JUDAS_ELASTIC_HOST'), 'port' => env('JUDAS_ELASTIC_PORT'), 'username' => env('JUDAS_ELASTIC_USERNAME'), 'password' => env('JUDAS_ELASTIC_PASSWORD') ), // Caso seja para logar 'queue_connection' => array( 'host' => env('JUDAS_QUEUE_HOST'), 'port' => env('JUDAS_QUEUE_PORT'), 'username' => env('JUDAS_QUEUE_USERNAME'), 'password' => env('JUDAS_QUEUE_PASSWORD') ), 'environment' => 'development'
在 Lumen 项目中安装
对于 Lumen 项目的安装,需要手动创建配置文件,我们将在 config 文件夹中添加一个名为 judas.php 的文件,内容如下:
// Caso seja apenas store 'elastic_connection' => array( 'host' => env('JUDAS_ELASTIC_HOST'), 'port' => env('JUDAS_ELASTIC_PORT'), 'username' => env('JUDAS_ELASTIC_USERNAME'), 'password' => env('JUDAS_ELASTIC_PASSWORD') ), // Caso seja para logar 'queue_connection' => array( 'host' => env('JUDAS_QUEUE_HOST'), 'port' => env('JUDAS_QUEUE_PORT'), 'username' => env('JUDAS_QUEUE_USERNAME'), 'password' => env('JUDAS_QUEUE_PASSWORD'), 'connection_name' => env('JUDAS_QUEUE_CONNECTION_NAME'), ), 'environment' => 'development'
我们还需要在 register 中添加我们的 service provider,因此,在 bootstrap/app.php 文件中找到注册行并添加以下内容:
<?php // ... $app->register(Eduzz\Judas\JudasLaravelServiceProvider::class); // ...
还需要添加对 judas 配置的调用,例如:
<?php $app->configure('judas'); return $app;
在没有 Illuminate 框架的项目中安装
要在没有 Laravel/Lumen 的项目中使用 Judas,需要手动设置配置,例如:
<?php require_once __DIR__ . '/vendor/autoload.php'; use Eduzz\Judas\Judas; $judas = new Judas(); $judas->setQueueConfig([ 'host' => 'localhost', 'port' => 5672, 'username' => 'guest', 'password' => 'guest', 'vhost' => '/' ]); // Caso você vá utilizar o store $judas->setKeeperConfig([ 'host' => 'localhost', 'port' => 9200, 'username' => 'elastic', 'password' => 'elastic', ]); $judas->environment = 'development';
关于 environment 参数
environment 参数定义在 store 时的消息将发送到哪个 elastic search 索引。
默认 environment 是 production,它将消息发送到 history 索引。当我们设置除 production 之外的其他 environment 时,日志将发送到
history-"Environment that was defined"
用法
记录日志
Judas 的所有日志都是 Hermes 消息,发送到 routingKey "judas.store.info"。
使用 Laravel/Lumen 记录日志
我们将使用 Laravel 的依赖注入来实例化 Judas,并获取 config/judas.php 中的配置,例如一个使用 judas 的 Laravel 控制器示例。
<?php namespace App\Http\Controllers; use Illuminate\Routing\Controller as BaseController; use Eduzz\Judas\Judas; class Controller extends BaseController { private $judas; public function __construct(Judas $judas) { $this->judas = $judas; parent::__construct(); } public function method() { // Sua lógica aqui $this->judas->log( // app.module.action 'myeduzzleg.user.login', [ 'agent' => 'user', 'event.data.id' => 999, 'user.id' => 999, 'user.name' => "angelorodriigo.rs@gmail.com", 'user.ip' => "127.0.0.1", 'additional_data.status' => 'success' ] ); } }
在没有 Illuminate 框架中记录日志
要使用不带 Illuminate 框架的日志,我们将使用已设置配置的对象以常规方式记录日志。
<?php require_once __DIR__ . '/vendor/autoload.php'; use Eduzz\Judas\Judas; $judas = new Judas(); $judas->setQueueConfig([ 'host' => 'localhost', 'port' => 5672, 'username' => 'guest', 'password' => 'guest', 'vhost' => '/', 'connection_name' => null, ]); $judas->environment = 'development'; $judas->log( // app.module.action 'myeduzzleg.user.login', [ 'agent' => 'user', 'event.data.id' => 999, 'user.id' => 999, 'user.name' => "angelorodriigo.rs@gmail.com", 'user.ip' => "127.0.0.1", 'additional_data.status' => 'success' ] );
类型
Judas 的日志是分类型的,我们有几个必填参数和几个非必填参数,还有一些是必填参数且需要值 "x"。
一些非必填参数被推荐以获得更好的控制。
第一个参数传递的字符串值对应于
app.module.action
也就是说,这些值不需要在数组中传递,如上面显示的示例。
数据数组参数表
存储日志到Elasticsearch
Judas的日志被发送到一个队列中,然后一个工作进程处理这些日志并将它们发送到Elasticsearch。
存储日志
在日志存储中需要一些参数,如索引和日期,需要传递一个JSON到store方法。
<?php $judas->store( json_encode( [ "index" => 'history', "event" => [ "date" => "2018-05-14T14:24:28Z" ] ] ) );
数据将按照传递的索引进行存储。在上面的例子中,资源将存储在"/history/default"。
正确的方法是使用一个工作进程,当通过"Judas->log()"方法将新日志发送到队列时,它会将该数据发送到Elasticsearch。我们可以使用Hermes来完成这个任务。
<?php $hermes->addQueue('judas_logs') ->bind('judas.store.info') ->getLastQueueCreated(); $hermes->addListenerTo( 'judas_logs', function($msg) use ($judas) { $judas->store(json_decode($msg->body)); } );