Spec-Zone.ru › Phalcon 3

Ведение журнала

Phalcon\Logger — это компонент, предназначенный для предоставления служб ведения журнала для приложений. Он обеспечивает ведение журнала в разных бэкендах с использованием различных адаптеров. Он также предлагает транзакционное ведение журнала, параметры конфигурации, различные форматы и фильтры. Вы можете использовать Phalcon\Logger для всех потребностей вашего приложения в ведении журнала, от отладки процессов до отслеживания потока приложения.

Адаптеры

Этот компонент использует адаптеры для хранения записей журнала. Использование адаптеров позволяет получить общий интерфейс ведения журнала, который предоставляет возможность легко переключаться между бэкендами при необходимости. Поддерживаемые адаптеры:

Адаптер Описание
Phalcon\Logger\Adapter\File Запись в текстовый файл
Phalcon\Logger\Adapter\Stream Запись в потоки PHP
Phalcon\Logger\Adapter\Syslog Запись в системный логгер
Phalcon\Logger\Adapter\FirePHP Запись в FirePHP

Создание лога

Пример ниже демонстрирует создание лога и добавление в него сообщений:

use Phalcon\Logger;
use Phalcon\Logger\Adapter\File as FileAdapter;

$logger = new FileAdapter("app/logs/test.log");



// These are the different log levels available:

$logger->critical(
    "This is a critical message"
);

$logger->emergency(
    "This is an emergency message"
);

$logger->debug(
    "This is a debug message"
);

$logger->error(
    "This is an error message"
);

$logger->info(
    "This is an info message"
);

$logger->notice(
    "This is a notice message"
);

$logger->warning(
    "This is a warning message"
);

$logger->alert(
    "This is an alert message"
);



// You can also use the log() method with a Logger constant:
$logger->log(
    "This is another error message",
    Logger::ERROR
);

// If no constant is given, DEBUG is assumed.
$logger->log(
    "This is a message"
);

// You can also pass context parameters like this
$logger->log(
    "This is a {message}",
    [
        'message' => 'parameter'
    ]
);

Сгенерированный лог:

[Tue, 28 Jul 15 22:09:02 -0500][CRITICAL] This is a critical message
[Tue, 28 Jul 15 22:09:02 -0500][EMERGENCY] This is an emergency message
[Tue, 28 Jul 15 22:09:02 -0500][DEBUG] This is a debug message
[Tue, 28 Jul 15 22:09:02 -0500][ERROR] This is an error message
[Tue, 28 Jul 15 22:09:02 -0500][INFO] This is an info message
[Tue, 28 Jul 15 22:09:02 -0500][NOTICE] This is a notice message
[Tue, 28 Jul 15 22:09:02 -0500][WARNING] This is a warning message
[Tue, 28 Jul 15 22:09:02 -0500][ALERT] This is an alert message
[Tue, 28 Jul 15 22:09:02 -0500][ERROR] This is another error message
[Tue, 28 Jul 15 22:09:02 -0500][DEBUG] This is a message
[Tue, 28 Jul 15 22:09:02 -0500][DEBUG] This is a parameter

Вы также можете установить уровень лога, используя метод setLogLevel(). Этот метод принимает константу Logger и сохранит только сообщения журнала, которые имеют такой же или больший приоритет, чем эта константа:

use Phalcon\Logger;
use Phalcon\Logger\Adapter\File as FileAdapter;

$logger = new FileAdapter("app/logs/test.log");

$logger->setLogLevel(
    Logger::CRITICAL
);

В примере выше сохранятся только сообщения критического и аварийного уровня. По умолчанию сохраняются все сообщения.

Транзакции

Запись данных в адаптер, например, в файл (файловая система), всегда является дорогостоящей операцией с точки зрения производительности. Чтобы справиться с этим, вы можете использовать транзакции ведения журнала. Транзакции временно хранят данные журнала в памяти, а затем записывают данные в соответствующий адаптер (в данном случае File) в одной атомарной операции.

use Phalcon\Logger\Adapter\File as FileAdapter;

// Create the logger
$logger = new FileAdapter("app/logs/test.log");

// Start a transaction
$logger->begin();

// Add messages

$logger->alert(
    "This is an alert"
);

$logger->error(
    "This is another error"
);

// Commit messages to file
$logger->commit();

Ведение журнала в нескольких обработчиках

Phalcon\Logger может отправлять сообщения в несколько обработчиков одним вызовом:

use Phalcon\Logger;
use Phalcon\Logger\Multiple as MultipleStream;
use Phalcon\Logger\Adapter\File as FileAdapter;
use Phalcon\Logger\Adapter\Stream as StreamAdapter;

$logger = new MultipleStream();



$logger->push(
    new FileAdapter("test.log")
);

$logger->push(
    new StreamAdapter("php://stdout")
);



$logger->log(
    "This is a message"
);

$logger->log(
    "This is an error",
    Logger::ERROR
);

$logger->error(
    "This is another error"
);

Сообщения отправляются обработчикам в порядке их регистрации.

Форматирование сообщений

Этот компонент использует «форматеры» для форматирования сообщений перед их отправкой в бэкенд. Доступные форматеры:

Адаптер Описание
Phalcon\Logger\Formatter\Line Форматирует сообщения в строку одной строки
Phalcon\Logger\Formatter\Firephp Форматирует сообщения для отправки в FirePHP
Phalcon\Logger\Formatter\Json Подготавливает сообщение для кодирования в формате JSON
Phalcon\Logger\Formatter\Syslog Подготавливает сообщение для отправки в syslog

Форматер строк

Форматирует сообщения в строку одной строки. По умолчанию формат ведения журнала:

[%date%][%type%] %message%

Вы можете изменить формат по умолчанию, используя setFormat(), это позволяет изменить формат записываемых сообщений, определив свой собственный. Разрешенные переменные формата лога:

Переменная Описание
%message% Само сообщение, ожидаемое для записи
%date% Дата добавления сообщения
%type% Заглавные буквы типа сообщения

Пример ниже показывает, как изменить формат лога:

use Phalcon\Logger\Formatter\Line as LineFormatter;

$formatter = new LineFormatter("%date% - %message%");

// Changing the logger format
$logger->setFormatter($formatter);

Реализация собственных форматеров

Для создания собственного форматера лога или расширения существующих необходимо реализовать интерфейс Phalcon\Logger\FormatterInterface.

Адаптеры

Следующие примеры демонстрируют базовое использование каждого адаптера:

Обработчик потоков

Обработчик потоков записывает сообщения в действительный зарегистрированный поток в PHP. Список потоков доступен здесь:

use Phalcon\Logger\Adapter\Stream as StreamAdapter;

// Opens a stream using zlib compression
$logger = new StreamAdapter("compress.zlib://week.log.gz");

// Writes the logs to stderr
$logger = new StreamAdapter("php://stderr");

Обработчик файлов

Этот обработчик использует обычные файлы для записи любых данных. По умолчанию все файлы журнала открываются в режиме добавления, что открывает файлы только для записи; указатель файла устанавливается в конец файла. Если файла не существует, будет сделана попытка его создания. Вы можете изменить этот режим, передав дополнительные параметры в конструктор:

use Phalcon\Logger\Adapter\File as FileAdapter;

// Create the file logger in 'w' mode
$logger = new FileAdapter(
    "app/logs/test.log",
    [
        "mode" => "w",
    ]
);

Обработчик Syslog

Этот обработчик отправляет сообщения в системный логгер. Поведение syslog может отличаться в зависимости от операционной системы.

use Phalcon\Logger\Adapter\Syslog as SyslogAdapter;

// Basic Usage
$logger = new SyslogAdapter(null);

// Setting ident/mode/facility
$logger = new SyslogAdapter(
    "ident-name",
    [
        "option"   => LOG_NDELAY,
        "facility" => LOG_MAIL,
    ]
);

Обработчик FirePHP

Этот обработчик отправляет сообщения в заголовках HTTP-ответа, которые отображаются расширением FirePHP для Firebug в Firefox.

use Phalcon\Logger;
use Phalcon\Logger\Adapter\Firephp as Firephp;

$logger = new Firephp("");



$logger->log(
    "This is a message"
);

$logger->log(
    "This is an error",
    Logger::ERROR
);

$logger->error(
    "This is another error"
);

Реализация собственных адаптеров

Для создания собственных адаптеров лога или расширения существующих необходимо реализовать интерфейс Phalcon\Logger\AdapterInterface.

© 2011–2017 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/latest/reference/logging.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API