PHPackages                             andrey-tech/graylogger-php - 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. andrey-tech/graylogger-php

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

andrey-tech/graylogger-php
==========================

Простой PSR-3 логгер в Graylog в формате GELF версии 1.1 по протоколу TCP

v1.4.0(4y ago)014MITPHPPHP &gt;=5.4

Since May 31Pushed 4y ago1 watchersCompare

[ Source](https://github.com/andrey-tech/graylogger-php)[ Packagist](https://packagist.org/packages/andrey-tech/graylogger-php)[ Docs](https://github.com/andrey-tech/graylogger-php)[ RSS](/packages/andrey-tech-graylogger-php/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (3)Versions (2)Used By (0)

GrayLogger PHP
==============

[](#graylogger-php)

[![Graylog logo](assets/graylog-logo.png)](assets/graylog-logo.png)

Простой [PSR-3](https://www.php-fig.org/psr/psr-3/)логгер в [Graylog](https://www.graylog.org/)в формате [GELF](https://docs.graylog.org/en/3.3/pages/gelf.html)версии [1.1](https://docs.graylog.org/en/3.3/pages/gelf.html#gelf-payload-specification)по протоколу [TCP](https://docs.graylog.org/en/3.3/pages/gelf.html#gelf-via-tcp).

[![Latest Stable Version](https://camo.githubusercontent.com/45ca19b32df66c6fc3bacc9d93e5f5fec97b094b78eb960058ebcf7d45cf16e8/68747470733a2f2f706f7365722e707567782e6f72672f616e647265792d746563682f677261796c6f676765722d7068702f76)](https://packagist.org/packages/andrey-tech/graylogger-php)[![Total Downloads](https://camo.githubusercontent.com/de825fe983cd583564dc58397f35c6566e73ba647211e73c4e79cb1e7a051458/68747470733a2f2f706f7365722e707567782e6f72672f616e647265792d746563682f677261796c6f676765722d7068702f646f776e6c6f616473)](https://packagist.org/packages/andrey-tech/graylogger-php)[![License](https://camo.githubusercontent.com/80432ace355e1832450d1d8bdc00e669938007c23bd22dd693ac4f1f855b6949/68747470733a2f2f706f7365722e707567782e6f72672f616e647265792d746563682f677261796c6f676765722d7068702f6c6963656e7365)](https://packagist.org/packages/andrey-tech/graylogger-php)

Содержание
==========

[](#содержание)

- [Требования](#%D0%A2%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
- [Установка](#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)
- [Класс `GrayLogger`](#%D0%9A%D0%BB%D0%B0%D1%81%D1%81-graylogger)
    - [Методы класса](#%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0)
    - [Примеры](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B)
- [Тестирование](#%D0%A2%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
    - [Функциональное тестирование](#%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
    - [Анализ кода](#%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7-%D0%BA%D0%BE%D0%B4%D0%B0)
- [Автор](#%D0%90%D0%B2%D1%82%D0%BE%D1%80)
- [Лицензия](#%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F)

Требования
----------

[](#требования)

- PHP &gt;= 5.4;
- Произвольный автозагрузчик классов, реализующий стандарт [PSR-4](https://www.php-fig.org/psr/psr-4/), и необходимый когда Composer не используется.

Установка
---------

[](#установка)

Установка через composer:

```
$ composer require andrey-tech/graylogger-php:"^1.4"

```

Класс `GrayLogger`
------------------

[](#класс-graylogger)

Класс `\GrayLogger\GrayLogger` реализует интерфейс `\Psr\Log\LoggerInterface`, согласно стандарту [PSR-4](https://www.php-fig.org/psr/psr-4/), и обеспечивает логирование в [Graylog](https://www.graylog.org/)в формате [GELF](https://docs.graylog.org/en/3.3/pages/gelf.html)версии [1.1](https://docs.graylog.org/en/3.3/pages/gelf.html#gelf-payload-specification)по протоколу [TCP](https://docs.graylog.org/en/3.3/pages/gelf.html#gelf-via-tcp).

При возникновении ошибок может выбрасываться исключение класса `\GrayLogger\GrayLoggerException`(по умолчанию отключено, см. метод класса `setThrowException()`).

### Методы класса

[](#методы-класса)

Класс `\GrayLogger\GrayLogger` имеет следующие публичные методы:

МетодОписаниеПо умолчанию`setServer(string $server): void`Устанавливает адрес сервера Graylog*localhost*`setPort(string $port): void`Устанавливает TCP-порт сервера Graylog*12201*`setConnectTimeout(float $connectTimeout): void`Устанавливает таймаут соединения с сервером Graylog в секундах*10.0*`setHost(string $host): void`Устанавливает имя хоста для логирования[`gethostname()`](https://www.php.net/manual/en/function.gethostname.php)`setThrowExceptions(bool $throwExceptions): void`Устанавливает флаг - выбрасывать ли исключение класса `GrayLoggerException` при возникновении ошибки: *true* - выбрасывать, *false* - не выбрасывать*false*`setContext(array $context): void`Устанавливает массив сопутствующих данных в кодировке UTF-8, передаваемых в дополнительных полях (additional field) [GELF](https://docs.graylog.org/en/3.3/pages/gelf.html#gelf-payload-specification) во всех последующих лог-сообщениях`addContext(array $context): void`Добавляет новые элементы в массив сопутствующих данных в кодировке UTF-8, передаваемых в дополнительных полях (additional field) [GELF](https://docs.graylog.org/en/3.3/pages/gelf.html#gelf-payload-specification) во всех последующих лог-сообщениях`getLastMessage(): ?string`Возвращает последнее сформированной сообщение [GELF](https://docs.graylog.org/en/3.3/pages/gelf.html#gelf-payload-specification)`getLastErrorMessage(): ?string`Возвращает последнее сообщение об ошибке (исключении)`getUniqId(int $length = 7) :string`Возвращает уникальный буквенно-цифровой идентификатор, связанный с объектом класса `GrayLogger` и необходимый для поиска в Graylog всех лог-сообщений, сформированных в рамках одного запуска PHP-скрипта1`static instance(): self`Возвращает единственный объект класса `GrayLogger` (синглтон)**Методы [PSR-4](https://www.php-fig.org/psr/psr-4/)** 2`emergency(string|object $message, array $context = []): void`Выполняет логирование с уровнем EMERGENCY`alert(string|object $message, array $context = []): void`Выполняет логирование с уровнем ALERT`critical(string|object $message, array $context = []): void`Выполняет логирование с уровнем CRITICAL`error(string|object $message, array $context = []): void`Выполняет логирование с уровнем ERROR`warning(string|object $message, array $context = []): void`Выполняет логирование с уровнем WARNING`notice(string|object $message, array $context = []): void`Выполняет логирование с уровнем NOTICE`info(string|object $message, array $context = []): void`Выполняет логирование с уровнем INFO`debug(string|object $message, array $context = []): void`Выполняет логирование с уровнем DEBUG`log(int $level, string|object $message, array $context = []): void`Выполняет логирование с уровнем, заданным параметром `$level`3Примечания.

1. Строка идентификатора удовлетворяет регулярному выражению */^\[a-z0-9\]+$/*. Допустимая длина идентификатора: 0-36 символов, по умолчанию - 7 символов.
2. В параметре `$message` передается сообщение, которое должно быть строкой в кодировке UTF-8 или объектом, реализующим метод `__toString()`. Сообщение может содержать плейсхолдеры в виде `{foo}`, где `foo` будет заменено на значение элемента массива сопутствующих данных, передаваемых в параметре `$context` с ключом `foo`. Сообщение передается в поле `short_message` [GELF](https://docs.graylog.org/en/3.3/pages/gelf.html#gelf-payload-specification).
    Параметр `$context` может содержать массив сопутствующих данных в кодировке UTF-8, передаваемых в дополнительных полях (additional field) [GELF](https://docs.graylog.org/en/3.3/pages/gelf.html#gelf-payload-specification).
3. Возможные значения параметра `$level` задаются публичными константами класса: `GrayLogger::EMERGENCY`, `GrayLogger::ALERT`, `GrayLogger::CRITICAL`, `GrayLogger::ERROR`, `GrayLogger::WARNING`, `GrayLogger::NOTICE`, `GrayLogger::INFO`, `GrayLogger::DEBUG`.

### Примеры

[](#примеры)

Файлы примеров расположены в каталоге *examples*.

Пример использования класса `GrayLogger` с перехватом исключений класса `GrayLoggerException`:

```
use GrayLogger\GrayLogger;
use GrayLogger\GrayLoggerException;

try {
    // Создаем объект класса GrayLogger
    $logger = new GrayLogger();

    // Устанавливаем адрес сервера Graylog
    $logger->setServer('graylog.example.com');

    // Устанавливаем TCP-порт сервера Graylog
    $logger->setPort(9000);

    // Устанавливаем таймаут соединения с сервером Graylog равный 5 секундам
    $logger->setConnectTimeout(5.0);

    // Разрешаем выбрасывать исключение класса GrayLoggerException при возникновении ошибки
    $logger->setThrowExceptions(true);

    /*
     * Устанавливаем массив сопутствующих данных в кодировке UTF-8,
     * передаваемых в дополнительных полях (additional field) GELF
     * во всех последующих лог-сообщениях
     */
    $logger->setContext([
        /*
         * Уникальный буквенно-цифровой идентификатор, необходимый для поиска в Graylog
         * всех лог-сообщений в рамках одного запроса
         */
        'request_id' => $this->getUniqId(),

        // Имя файла скрипта, который сейчас выполняется, относительно корня документов
        'script'     => $_SERVER['PHP_SELF']
    ]);

    /*
     * Выполняем логирование с уровнем INFO
     * Пример сформированного сообщения GELF (pretty print):
     * {
     *     "version": "1.1",
     *     "host": "localhost",
     *     "timestamp": 1622394990.561,
     *     "short_message": "Request",
     *     "level": 6,
     *     "_request_id": "w1fv73k",
     *     "_script": "/index.php",
     *     "_request": "{ \"id\": \"12345\" }"
     * }
     */
    $logger->info('Request', [
        'request'    => $_POST // Данные POST-запроса в кодировке UTF-8
    ]);

    /*
     * Добавляем новые элементы в массив сопутствующих данных в кодировке UTF-8,
     * передаваемых в дополнительных полях (additional field) GELF
     * во всех последующих лог-сообщениях
     */
    $logger->addContext([
        'param'     => 6459
    ]);

    /*
     * Выполняем логирование с уровнем WARNING
     * Пример сформированного сообщения GELF (pretty print):
     * {
     *     "version": "1.1",
     *     "host": "localhost",
     *     "timestamp": 1622394991.113,
     *     "short_message": "Value of parameter is 6459",
     *     "level": 4,
     *     "_request_id": "w1fv73k",
     *     "_script": "/index.php",
     *     "_param": 6459,
     *     "_foo": "bar"
     * }
     */
    $logger->log(GrayLogger::WARNING, 'Value of parameter is {param}', [ 'foo' => 'bar' ]);

} catch (GrayLoggerException $exception) {
    printf('Ошибка (%d): %s' . PHP_EOL, $exception->getCode(), $exception->getMessage());
}
```

Пример использования класса `GrayLogger` и метода `instance()` с запретом выбрасывать исключения класса `GrayLoggerException`:

```
use GrayLogger\GrayLogger;

// Создаем объект класса GrayLogger
$logger = GrayLogger::instance();

// Устанавливаем адрес сервера Graylog
$logger->setServer('graylog.example.com');

// Устанавливаем TCP-порт сервера Graylog
$logger->setPort(9000);

// Устанавливаем таймаут соединения с сервером Graylog равный 5 секундам
$logger->setConnectTimeout(5.0);

/*
 * Явно запрещаем выбрасывать исключение класса GrayLoggerException
 * при возникновении ошибки (поведение по умолчанию)
 */
$logger->setThrowExceptions(false);

/*
 * Устанавливаем массив сопутствующих данных в кодировке UTF-8,
 * передаваемых в дополнительных полях (additional field) GELF
 * во всех последующих лог-сообщениях
 */
$logger->setContext([
    /*
     * Уникальный буквенно-цифровой идентификатор, необходимый для поиска в Graylog
     * всех лог-сообщений в рамках одного запроса
     */
    'request_id' => $this->getUniqId()
]);

/*
 * Выполняем логирование с уровнем INFO
 * Пример сформированного сообщения GELF (pretty print):
 * {
 *     "version": "1.1",
 *     "host": "localhost",
 *     "timestamp": 1622394995.449,
 *     "short_message": "Request",
 *     "level": 6,
 *     "_request_id": "i4prla2",
 *    "_foo": "bar"
 * }
 */
$logger->info('Request', [ 'foo' => 'bar' ]);

/*
 * В другом месте получаем тот же объект класса GrayLogger
 * $logger === $logger2
 */
$logger2 = GrayLogger::instance();

/*
 * Выполняем логирование с уровнем WARNING
 * Пример сформированного сообщения GELF (pretty print):
 * {
 *     "version": "1.1",
 *     "host": "localhost",
 *     "timestamp": 1622394996.261,
 *     "short_message": "Value of parameter foo is bar",
 *     "level": 7,
 *     "_request_id": "i4prla2",
 *    "_foo": "bar"
 * }
 */
$logger2->log(GrayLogger::DEBUG, 'Value of parameter foo is {foo}');

// Выводим последнее сформированное лог-сообщение
echo $logger2->getLastMessage();

// Выводим последнее сообщение об ошибке (исключении) при его наличии
$errorMessage = $logger2->getLastErrorMessage();
if (isset($errorMessage)) {
    echo $errorMessage;
}
```

Тестирование
------------

[](#тестирование)

Тестирование выполняется с помощью библиотеки [PHPUnit версии 4](https://phpunit.de/getting-started/phpunit-4.html)для обеспечения совместимости с PHP 5.4.

### Функциональное тестирование

[](#функциональное-тестирование)

Классы функциональных тестов расположены в каталоге *tests/Functional*. Функциональное тестирование реализовано при помощи класса `\Test\Functional\SocketServerStub`, который эмулирует сервер GrayLog и принимает входящие запросы по адресу `tcp://localhost:12201`. Для функционального тестирования разработано 46 тестов PHPUnit, запускаемых командой:

```
$ vendor/bin/phpunit

```

### Анализ кода

[](#анализ-кода)

Для анализа нарушений стандарта кодирования [PSR-2](https://www.php-fig.org/psr/psr-2/) используется PHP CodeSniffer, запускаемый командой:

```
$ vendor/bin/phpcs --standard=PSR2 src tests examples

```

Автор
-----

[](#автор)

© 2021 andrey-tech

Лицензия
--------

[](#лицензия)

Данная библиотека распространяется на условиях лицензии [MIT](./LICENSE).

###  Health Score

22

—

LowBetter than 22% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 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

Unknown

Total

1

Last Release

1804d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/de69f7116b4bbba0435826347eeea01c7c6d831ae5ca5325ccf0686e7ddb92b4?d=identicon)[andrey-tech](/maintainers/andrey-tech)

---

Top Contributors

[![andrey-tech](https://avatars.githubusercontent.com/u/51994444?v=4)](https://github.com/andrey-tech "andrey-tech (1 commits)")

---

Tags

gelfgraylogloggerpsr-3tcplogloggingtcploggerPSR3grayloggelf11

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/andrey-tech-graylogger-php/health.svg)

```
[![Health](https://phpackages.com/badges/andrey-tech-graylogger-php/health.svg)](https://phpackages.com/packages/andrey-tech-graylogger-php)
```

###  Alternatives

[analog/analog

Fast, flexible, easy PSR-3-compatible PHP logging package with dozens of handlers.

3451.5M24](/packages/analog-analog)[hedii/laravel-gelf-logger

A Laravel package to send logs to a gelf compatible backend like graylog

1333.4M10](/packages/hedii-laravel-gelf-logger)[inpsyde/wonolog

Monolog-based logging package for WordPress.

183617.9k6](/packages/inpsyde-wonolog)[amphp/log

Non-blocking logging for PHP based on Amp, Revolt, and Monolog.

402.6M70](/packages/amphp-log)[apix/log

Minimalist, thin and fast PSR-3 compliant (multi-bucket) logger.

511.0M18](/packages/apix-log)[markrogoyski/simplelog-php

Powerful PSR-3 logging. So easy, it's simple.

2818.1k4](/packages/markrogoyski-simplelog-php)

PHPackages © 2026

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