Приветствую! Спрошу кратко: как лучше реализовать систему логов? На MySQL или на файлах?
P.S.: планируется вести лог почти каждого действия.
Приветствую! Спрошу кратко: как лучше реализовать систему логов? На MySQL или на файлах?
P.S.: планируется вести лог почти каждого действия.
Я бы сделал на MySQL, потому что можно реализовать логи с категориями, сделать удобный поиск и просмотр через веб-интерфейс с различными фильтрами.
PawnoNoob (13.05.2018)
Если запрос асинхронный, основной поток сервера не блокируется.
В общих чертах всё должно выглядеть примерно так:
Или можно просто дампить строки, но это слишком "топорный" метод: мало того, что строки будут занимать больше пространства в БД, так ещё и не получится сделать вывод всех действий от конкретного админа или за конкретную дату (разве что юзать строковые функции, но это будет уже не так просто, да и не факт, что надёжно).
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
PawnoNoob (13.05.2018)
Хм, появилось ещё несколько вопросов:
1. Почему именно "_:action"? (я про нижнее подчёркивание и двоеточние ) Что это даёт?
2. Параметр "eAdminAction:action" возвращает порядковый номер из enum?
3. В каких случаях используется mysql_format и mysql_tquery? Просто читал в одной из статей, что mysql_format защищает от инъекций и т.д.
4. Что за "асинхронные" запросы?
Потому что функция mysql_format ожидает только аргументы, имеющие теги "_" или "Float" (см. теги перед "..." ниже).
Если не понимаете о чём я - просто удалите "_:" из того кода и попробуйте скомпилировать - словите варнинг о несоответствии тегов.
Это не функция, чтобы что-то возвращать. Если вы про тег в аргументе "action", то да, он означает, что его значением должна быть одна из констант из enum eAdminAction.
mysql_tquery() - отправляет асинхронные запросы к БД.
mysql_format(), как можно понять из примера выше, отвечает за форматирование строки с запросом. Основная причина её использования вместо format() - защита от инъекций. И хотя польза такой защиты есть только тогда, когда в форматной строке есть спецификатор "%s" (или "%e" в случае с mysql_format()), ИМХО, проще по привычке всегда использовать для запросов именно эту функцию. Кроме того, в последних версиях SA-MP в format() тоже появился аналогичный спецификатор "%q", но он больше специфичен для SQLite и по идее может неправильно работать с запросами для MySQL.
Запросы, выполняемые в отдельном потоке и не блокирующие главный поток, в котором выполняются скрипты и обрабатываются серверные данные.
Если запрос не асинхронный, он выполняется в главном потоке, в котором всё зависает, пока не выполнится запрос.
И да, я немного обновил создание БД в предыдущем посте, в первоначальном варианте не работало автозаполнение поля "id".
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)