定制 fi1a/log 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

fi1a/log

Composer 安装命令:

composer require fi1a/log

包简介

PHP библиотека ведения журнала (логирования)

README 文档

README

Latest Version Software License PHP Version Coverage Status Total Downloads Support mail

Данный пакет предоставляет функционал ведения журнала (логирования), используя обработчики. На данный момент доступны обработчики записи в файл, syslog и отправка записей на email адрес. Наличие "каналов" позволяет вести журнал, отправляя записи в разные обработчики с разными настройками. Один канал может содержать множество обработчиков записей журнала. Сообщения журнала могут быть записаны в разные обработчики в зависимости от их серьезности (уровня).

Установка

Установить этот пакет можно как зависимость, используя Composer.

composer require fi1a/log

Хелпер

В пакете доступен хелпер:

logger(?string $channel = null): ChannelsInterface|LoggerInterface|false;

Он возвращает каналы логгера.

Используя канал логирования channel1, записать в лог критическую ошибку:

logger('channel1')->critical('Critical error with {{value}}', ['value' => 'message',], ['id' => 1]);

Конфигурирование

Конфигурирование канала осуществляется путем добавления экземпляра класса Fi1a\Log\Logger, используя метод addChannel класса Fi1a\Log\ChannelsInterface возвращаемого хелпером logger без передачи аргументов.

Обработчики добавляются методом addHandler класса Fi1a\Log\Logger. В примере добавляются обработчики для записи в файл журнала Fi1a\Log\Handlers\StreamHandler записей с уровнем Fi1a\Log\LevelInterface::ERROR и отправку на email записей с уровнем Fi1a\Log\LevelInterface::EMERGENCY с помощью обработчика Fi1a\Log\Handlers\MailHandler.

use Fi1a\Log\Handlers\MailHandler;
use Fi1a\Log\Handlers\StreamHandler;
use Fi1a\Log\LevelInterface;
use Fi1a\Log\Logger;

$logger = new Logger('channel1');

$logger->addHandler(new StreamHandler(__DIR__ . '/filelog.log', LevelInterface::ERROR));
$logger->addHandler(new MailHandler('to@fi1a.ru', 'from@fila.ru', LevelInterface::EMERGENCY));

logger()->addChannel($logger);

Доступные обработчики

  • Fi1a\Log\Handlers\StreamHandler - обработчик логирования в файл (поток);
  • Fi1a\Log\Handlers\RotatingFileHandler - сохраняет логи в файлах с именем по маске времени. Хранится ограниченное кол-во файлов;
  • Fi1a\Log\Handlers\SyslogHandler - логирование в syslog;
  • Fi1a\Log\Handlers\MailHandler - отправка логов на почту.

Fi1a\Log\Handlers\StreamHandler

Сохранение записей журнала в файл или поток.

Аргументы конструктора Описание
string, resource $stream Путь к файлу или поток
int, string, LevelInterface $level = LevelInterface::DEBUG Уровень от которого обработчик записывает в журнал
?int $permission = null Права на файл
bool $lock = false Блокировать файл при записи
?FormatterInterface $formatter = null Объект форматирования записей журнала
use Fi1a\Log\Handlers\StreamHandler;

$handler = new StreamHandler(__DIR__ . '/filelog.log', LevelInterface::ERROR);
$logger->addHandler($handler);

Fi1a\Log\Handlers\RotatingFileHandler

Сохранение записей журнала в файлах с именем по маске времени. Хранится ограниченное кол-во файлов.

Аргументы конструктора Описание
string $filePathAndName Путь и название файла ведения журнала
int $maxFiles = 0 Кол-во файлов, которые хранятся. 0 - не ограничено.
?string $dateFormat = null Формат даты и времени в названии файла
int, string, LevelInterface $level = LevelInterface::DEBUG Уровень от которого обработчик записывает в журнал
?int $permission = null Права на файл
bool $lock = false Блокировать файл при записи
?FormatterInterface $formatter = null Объект форматирования записей журнала
use Fi1a\Log\Handlers\RotatingFileHandler;

$handler = new RotatingFileHandler(__DIR__ . '/filelog.log', 2, 'Y-m-d', LevelInterface::ERROR);
$logger->addHandler($handler);

Fi1a\Log\Handlers\SyslogHandler

Сохранение записей журнала, используя syslog.

Аргументы конструктора Описание
string $prefix = '' Строка добавляется к каждому сообщению
$facility = LOG_USER Параметр facility используется для определения типа программы
int, string, LevelInterface $level = LevelInterface::DEBUG Уровень от которого обработчик записывает в журнал
?FormatterInterface $formatter = null Объект форматирования записей журнала
int $logPid = LOG_PID Аргумент для указания используемых опций при создании записи журнала
use Fi1a\Log\Handlers\SyslogHandler;

$handler = new SyslogHandler('error', LOG_USER, LevelInterface::ERROR);
$logger->addHandler($handler);

Fi1a\Log\Handlers\MailHandler

Отправка записей журнала на почту.

Аргументы конструктора Описание
string, array<int, string> $to Список email адресов получателей
string $from Email адрес отправителя
int $countInBatch = 0 Кол-во отправляемых записей. 0 - не накапливать записи, отправлять по одной
?string $subjectFormat = null Формат заголовка письма
int, string, LevelInterface $level = LevelInterface::DEBUG Уровень от которого обработчик записывает в журнал
?FormatterInterface $formatter = null Объект форматирования записей журнала
use Fi1a\Log\Handlers\MailHandler;

$handler = new MailHandler('to@fi1a.ru', 'from@fila.ru', LevelInterface::ERROR);
$logger->addHandler($handler);

Запись сообщений журнала

Вы можете записывать информацию в журнал с помощью канала возвращаемого хелпером logger, который при передаче аргумента с названием канала возвращает его. Средство ведения журнала обеспечивает восемь уровней: emergency, alert, critical, error, warning, notice, info, и debug. Для каждого уровня есть свой метод записи в журнал:

$logger = logger('channel1');

$logger->emergency('Log {{value}}', ['value' => 'message'], ['id' => 1]);
$logger->alert('Log {{value}}', ['value' => 'message'], ['id' => 1]);
$logger->critical('Log {{value}}', ['value' => 'message'], ['id' => 1]);
$logger->error('Log {{value}}', ['value' => 'message'], ['id' => 1]);
$logger->warning('Log {{value}}', ['value' => 'message'], ['id' => 1]);
$logger->notice('Log {{value}}', ['value' => 'message'], ['id' => 1]);
$logger->info('Log {{value}}', ['value' => 'message'], ['id' => 1]);
$logger->debug('Log {{value}}', ['value' => 'message'], ['id' => 1]);
  • emergency - система не работает;
  • alert - ошибка. Необходимо принять меры немедленно.
  • critical - критическая ошибка;
  • error - ошибка, которая не требует немедленных действий, но должна быть записана;
  • warning - предупреждение;
  • notice - все нормально, но событие значимое;
  • info - какое-либо событие;
  • debug - отладочная информация.

Также доступен метод log для записи в журнал с передачей уровня логирования в аргументе:

$logger = logger('channel1');

$logger->log(LevelInterface::ERROR, 'Log {{value}}', ['value' => 'message'], ['id' => 1]);

Контекстная информация

Методом withContext класса Fi1a\Log\Logger (для этого канала), или класса Fi1a\Log\Channels (для всех каналов) может быть передан массив контекстных данных, которые будут включены во все последующие записи журнала. Также контекстные данные можно передать третьим аргументом любого из методов записи в журнал, эти контектсные данные будут использованы только к этой записи.

// Глобально для всех каналов
logger()->withContext(['pid' => 1]);

// Для конкретного канала
$logger = logger('channel1');
$logger->withContext(['uid' => 2]);

// Для конкретной записи
$logger->error('Log {{value}}', ['value' => 'message'], ['id' => 1]);

/*
14.01.2023 10:18:58
channel1.ERROR[500]
Log message
{"pid":1,"uid":2,"id":1}
 */

Форматирование

Доступны следующие классы для форматирования сообщений журнала:

  • Fi1a\Log\Formatters\TextFormatter - форматирование записи лога в текст;
  • Fi1a\Log\Formatters\HtmlFormatter - форматирование записи лога в виде html.

Каждому обработчику можно передать объект форматирование записи журнала в конструктор.

use Fi1a\Log\Formatters\HtmlFormatter;
use Fi1a\Log\Handlers\StreamHandler;
use Fi1a\Log\LevelInterface;

$formatter = new HtmlFormatter();

$logger->addHandler(
    new StreamHandler(
        __DIR__ . '/log.html',
        LevelInterface::DEBUG,
        0776,
        false,
        $formatter
    )
);

logger()->addChannel($logger);

$logger->error('Log {{value}}', ['value' => 'message'], ['id' => 1]);

统计信息

  • 总下载量: 178
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2023-01-28

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固