Рубрики
Uncategorized

Система ведения журнала в PHP-фреймворке

Автор оригинала: David Wong.

Введение Друзья, знакомые с фреймворком PHP, могут знать, что журнал играет важную роль в проекте. Это может помочь нам найти неправильное местоположение и сделать программу более дружественной (при правильном обращении она не будет выбрасывать много английского языка, который только обезьяны действительно могут перемещать), отладка будет очень удобной, а также она может записывать некоторые важные операции и т. Д. Одним словом, полное резюме проекта Без системы регистрации, дорога, которая была разработана, полна шипов и ям, на которые обязательно наткнешься.

краткое введение Чтобы освоить систему журналов PHP, мы должны сначала тщательно разобраться в этих вещах.

I. НЕКОТОРЫЕ ФУНКЦИИ PHP

Set_exception_handler (callback $exception_handler); //exception capture custom handler registration 

Set_error_handler (callback $error_handler); //error capture custom handler registration 

Register_shutdown_function (callback $callback); // registration of exception termination error capture handler at program execution

Эти три функции предоставляют разработчикам большую автономию в управлении обработкой ошибок, и они внесли свой вклад в регистрацию информации в системе журналов.

Когда в программе возникает проблема с исключением, ядро PHP выдает ошибку исключения, а затем выводит информацию об ошибке пользователю. Если функция обработки исключений зарегистрирована, исключение, вызванное PHP, будет передано в пользовательскую зарегистрированную функцию захвата исключений, которая содержит необходимую нам обработку и записывает информацию об ошибке (включая сведения об ошибке, местоположение ошибки). После того, как функция обработает исключение, исключение завершится.

Когда в программе возникает ошибка, наш зарегистрированный обработчик ошибок преобразует информацию об ошибке в объект исключения ошибки в функции и передает ее функции обработчика исключений, которая является функцией $exception_handler на первом шаге.

При повторном возникновении ошибки завершения работы выполняется обработчик завершения зарегистрированного исключения. Функция error_get_last() используется для получения объекта ошибки при последнем завершении работы. Затем, как и в предыдущем случае, генерируется объект исключения ошибки и передается нашему зарегистрированному обработчику исключений.

Можно видеть, что на самом деле, независимо от того, является ли это ненормальным или неправильным, вся информация преобразуется в ненормальную информацию, распознаваемую функцией обработки исключений, а затем передается функции обработки исключений. Ненормальная информация такая же, как у гримерши. Программа обработки исключений не распознает эту ненормальную информацию, а только загружает и выгружает ее (сама ненормальная информация преобразуется в ненормальную информацию, точнее говоря, так и должно быть). Он выбрасывается, обработка исключений распознается.

Процесс обработки ошибок в системе журналов PHP

Теперь возникает проблема. Эти функции обычно работают в сочетании с библиотекой классов обработки исключений и библиотекой классов журнала ошибок. Библиотека классов обработки исключений содержит три функции, которые необходимо зарегистрировать. Библиотека классов записи журналов вызывается в $exception_handler для разумной записи и размещения файлов журналов. Функции, упомянутые выше, обычно помещаются в рамки программы. Регистрация груза осуществляется в порту следующим образом:

Это делается в виде массива (класса, функции).

set_exception_handler(array("Myexception","exceptionHandler"));
set_error_handler(array("Myexception","errorHandler"));
register_shutdown_function(array("Myexception","shutdownHandler"));

II. Библиотека классов, связанных с ведением журнала

Первая часть посвящена фиксации исключений, ошибок и отключений. Это только первый шаг. Затем нам нужно разумно обработать полученную информацию, например, записать информацию журнала в локальную файловую систему (эта операция выполняется в массиве (“Myexception”, “ExceptionHandler”), где используется библиотека классов записей журнала. (Библиотеки классов, упомянутые ниже, относятся к дизайну системы журналов Kohana).

Logging is also very simple, as long as the information is added to the end of the file, this is easy to achieve, I believe everyone can achieve it by themselves, but it is not so simple to design a convenient, efficient and extended log record class library. After a long period of practice and optimization, the log record class library in the Kohana framework has become more mature. So here we can draw lessons from it.

I believe that users who have used Kohana must be familiar with the log records in the Kohana framework. It doesn't matter if they are not familiar with them. I will outline the following code in line 109-112 of the application/bootstrap.php file in the Kohana source code:

/**
* Attach the file write to logging. Multiple writers are supported.
*/
Kohana::$log->attach(new Log_File(APPPATH.'logs'));

This is to add a log object to the log object, pay attention to the olive bottom two, they are different library instances, in kohana, the log object is divided into two parts, the first part is the log object, used to maintain a list of log objects, how to understand this, in fact, like a container, which contains one or more logs Logging objects (this is the second part, these log objects are the real logs), as well as an array of error levels to be recorded by each object, will be recorded when the error level is satisfied, and will be omitted if not satisfied. Below is my own simplified way of logging after renaming:

self::$log = Log::instance();
self::$log->attach(new Logwriter("./data/debug"),Log::DEBUG);
self::$log->attach(new Logwriter("./data/notice"),Log::NOTICE);

In order to understand better, I named the container Log and the recorded instance Logwriter. I can see that it is easy to add two different kinds of logs at the program entrance. The first is to record all the errors with smaller error number than Log:: DEBUG (higher error level than him), and record them under folder. / data / debug according to the rules, the second is record level, etc. Of course, you can also specify which errors are better than Log:: NOTICE errors, just pass the array. This is where I feel convenient and fast. We can add error logs and divide different log directories according to our needs. Looking at a picture below may help us understand:

Связь между журналом и Лограйтером

Из рисунка выше видно, что журнал-это контейнер, содержащий определенные различные объекты logwriter. Каждый объект может записывать различную информацию. Когда информация об ошибках должна быть занесена в файл, запускается каждый экземпляр Logwriter, чтобы узнать, хочет ли он записывать ошибки в errormessage. Уровень в сообщении об ошибке игнорируется, если оно не включено в Logwriter.

Как эта часть работает с первой частью? Это очень просто. Когда исключение фиксирует исключение, оно вызывает добавление сообщения об ошибке (включая местоположение ошибки, код ошибки, сообщение об ошибке и т.д.) В массив сообщений об ошибках в контейнере журнала. Затем, когда программа будет завершена, она запишет информацию в файл. Также важно отметить, что, возможно, когда вы читаете код Kohana, вы обнаруживаете, что в журнале нет очевидной прямой записи. Кохана оптимизирует лучше, потому что в одном выполнении php может быть несколько ошибок. Если есть ошибка, вы можете записать ее один раз, что потребует чрезмерного ввода-вывода и времени до того, как программа вернется. Таким образом, подход Коханы заключается в том, чтобы хранить все ошибки, исключения и журналы в журнале:$сообщение об ошибке по умолчанию и регистрировать операцию записи в журнале при создании экземпляра. Функция gister_shutdown_function выполняется после аварийного завершения или завершения выполнения программы. Он также используется в первой части, так что записи журнала не будут иметь

Справочный веб-сайт: https://github.com/AizuYan/ph…