PHPackages                             jakubkratina/elasticlog - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. jakubkratina/elasticlog

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

jakubkratina/elasticlog
=======================

Library for sending application data to elasticsearch.

1.2(8y ago)018PHPPHP ^7.1

Since Mar 18Pushed 7y agoCompare

[ Source](https://github.com/jakubkratina/elasticlog)[ Packagist](https://packagist.org/packages/jakubkratina/elasticlog)[ RSS](/packages/jakubkratina-elasticlog/feed)WikiDiscussions master Synced today

READMEChangelog (3)Dependencies (5)Versions (4)Used By (0)

Installation
============

[](#installation)

Require package via composer

```
composer require jakubkratina/elasticlog

```

Configuration
=============

[](#configuration)

```
ELASTIC_ENABLED=true
ELASTIC_INDEX=index-name
ELASTIC_HOST_PORT=elasticsearch.example.com:9200

```

Register logger
===============

[](#register-logger)

### Laravel

[](#laravel)

```
$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();
    }
);
```

### Symfony

[](#symfony)

You can register client via factory class:

##### Register client into DI

[](#register-client-into-di)

```
    app.service.elasticlog:
        factory: ['AppBundle\Logger\ClientFactory', create]
```

##### Create factory class

[](#create-factory-class)

```
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';
    }
}
```

Usage
=====

[](#usage)

Create a message
----------------

[](#create-a-message)

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.

Available methods
-----------------

[](#available-methods)

`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());
```

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~4 days

Total

3

Last Release

2969d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/43a36656f78ed6d8d4c9fcec7d2fa49267e6d9817bacaa6642f8996af31ef692?d=identicon)[jakub.kratina](/maintainers/jakub.kratina)

---

Top Contributors

[![jakubkratina](https://avatars.githubusercontent.com/u/712021?v=4)](https://github.com/jakubkratina "jakubkratina (7 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/jakubkratina-elasticlog/health.svg)

```
[![Health](https://phpackages.com/badges/jakubkratina-elasticlog/health.svg)](https://phpackages.com/packages/jakubkratina-elasticlog)
```

###  Alternatives

[bagisto/bagisto

Bagisto Laravel E-Commerce

26.2k161.6k7](/packages/bagisto-bagisto)[beyondcode/laravel-server-timing

Add Server-Timing header information from within your Laravel apps.

5712.0M1](/packages/beyondcode-laravel-server-timing)[larabug/larabug

Laravel 6.x/7.x/8.x/9.x/10.x/11.x/12.x/13.x bug notifier

299549.3k1](/packages/larabug-larabug)[yoeriboven/laravel-log-db

A database driver for logging with Laravel

58156.5k](/packages/yoeriboven-laravel-log-db)[masterro/laravel-mail-viewer

Easily view in browser outgoing emails.

6392.1k](/packages/masterro-laravel-mail-viewer)[bacula-web/bacula-web

The open source web based reporting and monitoring tool for Bacula

1537.5k](/packages/bacula-web-bacula-web)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
