Require package via composer
composer require jakubkratina/elasticlog
ELASTIC_ENABLED=true
ELASTIC_INDEX=index-name
ELASTIC_HOST_PORT=elasticsearch.example.com:9200
$app->bind(
\JK\Elasticlog\Contracts\Elasticsearch\Client::class,
function () {
if (env('ELASTIC_ENABLED', false) === true) {
return new \JK\Elasticlog\Elasticsearch\Client(
\Elasticsearch\ClientBuilder::create()->setHosts([env('ELASTIC_HOST_PORT')])->build(),
env('ELASTIC_INDEX')
);
}
return new \JK\Elasticlog\Elasticsearch\NullClient();
}
);
You can register client via factory class:
app.service.elasticlog:
factory: ['AppBundle\Logger\ClientFactory', create]
use JK\Elasticlog\Contracts\Elasticsearch\Client;
use JK\Elasticlog\Elasticsearch\Client as ElasticClient;
use JK\Elasticlog\Elasticsearch\NullClient;
use Elasticsearch\ClientBuilder;
final class ClientFactory
{
/**
* @return Client
*/
public static function create(): Client
{
return self::isElasticsearchEnabled()
? self::createElasticClient()
: self::createNullClient();
}
/**
* @return Client
*/
private static function createNullClient(): Client
{
return new NullClient();
}
/**
* @return Client
*/
private static function createElasticClient(): Client
{
return new ElasticClient(
ClientBuilder::create()->setHosts([getenv('ELASTIC_HOST_PORT')])->build(), getenv('ELASTIC_INDEX')
);
}
/**
* @return bool
*/
private static function isElasticsearchEnabled(): bool
{
return getenv('ELASTIC_ENABLED') === 'true';
}
}
Create a new class extending from JK\Elasticlog\Log\Message
and implement the toArray
method.
class MyCustomMessage extends \JK\Elasticlog\Log\Message
{
public function toArray(): array
{
return [
'foo' => 'bar'
];
}
}
You are free to pass parameters via constructor:
class MyCustomMessage extends \JK\Elasticlog\Log\Message
{
private $name;
public function __construct(string $name)
{
$this->name = $name;
}
public function toArray(): array
{
return [
'foo' => 'bar',
'name' => ucfirst($this->name)
];
}
}
$message = new MyCustomMessage();
// ... your code
$logger->log($message);
The duration between creating and logging a message is measured out of the box as a
duration
property.
toArray
, add
, append
, merge
$message = (new Messages)->fooBarMessage();
$message->toArray(); // ['foo' => 'bar']
$message->add('a', (new Messages)->fooBarMessage());
$message->add('b', (new Messages)->barBazMessage());
$message->append((new Messages)->fooBarMessage());
$message->append((new Messages)->barBazMessage());
$message->merge([
'x' => 'y',
]);
$this->assertEquals([
'foo' => 'bar',
'a' => [
'foo' => 'bar',
],
'b' => [
'bar' => 'baz',
],
'bar' => 'baz',
'x' => 'y',
], $message->build());