eduzz/judas

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

这个库负责保存 Eduzz 应用程序的日志。

dev-master 2021-03-15 12:14 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));
	}
);