Самый эффективный способ написания (To File) logger на PHP? - PullRequest
3 голосов
/ 24 января 2012

Надеюсь, кто-то здесь может мне помочь - в основном у меня есть класс журналирования, который я обновляю (сделал это давным-давно), и я хочу убедиться, что он регистрирует сообщения в 98-99% случаев.Однако сейчас он не обрабатывает exit (), он просто записывает в файл (открытие, запись и закрытие) каждый раз, когда сообщение / ошибка отправляется в регистратор.

Что былучший способ обработать exit () и быть эффективным с точки зрения записи на диск?Прямо сейчас я смотрю на __destruct в классе logger (с вызовом fopen, fwrite и fclose), однако я не совсем уверен, является ли это безопасным или эффективным.

Редактировать: Чтоо set_error_handler ()?Я помню, как много лет назад читал, что это было очень медленно и не очень хорошо для пользовательских ошибок / сообщений (например, вопросов SQL)

Ответы [ 2 ]

6 голосов
/ 24 января 2012

Если вы хотите что-то записать, когда ваш скрипт заканчивается, вы должны взглянуть на PHP register_shutdown_function():

function shutdown()
{
     // .. log code here.
}

register_shutdown_function('shutdown');

Вам следует избегать использования метода __destruct(), поскольку нет гарантии, что он будет вызван, когда вы ожидаете, что он будет вызван.

Вы также можете взглянуть на встроенный в PHP метод error_log(), чтобы записать содержимое в реальный файл журнала ошибок PHP (возможно, это более надежно, чем написание собственного логгера).

Ссылки:

http://php.net/manual/en/function.register-shutdown-function.php

http://php.net/manual/en/function.error-log.php

1 голос
/ 24 января 2012

Я всегда использую некоторые глобальные функции, например

function BeforeExit () {
  //do stuff like logging
  exit;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...