Доброго времени суток дорогие форумчане. Вопрос собственно в том, каким образом лучше хранить логи активных действий пользователей (такие как удаление или изменение сообщений, изменение профиля и прочее). Рационально ли использовать для этого таблицу в БД, записывая каждый параметр (действие, время, id, старое значение) в отдельную ячейку или все таки лучше писать все в txt файлы в кучу? Быть может кто-то знает еще способ, который превосходит вышеуказанные для конкретной необходимости. А необходимость этих логов собственно вот в чем: - иметь человекопонятный вид для чтения - просты для обработки и вывода по шаблону в админку - просты для отката конкретных действий пользователя Пример: Администратор Вася зашел в раздел новостей и добавил запись "хочу сало". //в таблицу news добавилась примерно такая строка (id,author,see_author,date,text) Затем в новости зашел администратор Петя и решил изменить это сообщение //в таблице news поменялось значение ячейки text //в логи нужно кинуть такую строку (id,id_news,date,editor,old_text) После чего заходит администратор Маша и нафиг удаляет эту запись //в таблице news запись отмечается специальным "клеймом" в дополнительной ячейке //в логи нужно кинуть такую строку (id,id_news,date,editor) После всего нужно узнать кто изменял и удалил эту запись, кроме того, возможно понадобится восстановить запись и откатить ее к первоначальному виду. С восстановлением проблем нет - нужно просто изменить "клеймо" в таблице и добавить строку в логи. Однако с откатом есть трудности, ведь нужно вернуть из логов старое значение поля text и записать его. Из всего выше мною написанного я делаю вывод, что лучше использовать БД, ибо в этом случае не составит никакого труда вытащить значение old_text, как если бы мы искали его в файле txt. Но все же хочется узреть мнение профессионалов и опытных прогеров =) С уважением Евгений.
Всё зависит от того как часто вы лазите в лог, потребуется ли вам джоинить связанные записи в других таблицах и базах или нет и от того как часто вы собираетесь восстанавливаться с лога. Обычно логи хранятся в текстовых файлах а не файлах реляционных таблиц. Если описанные выше действия у вас производятся часто, то храните в таблице. Если лог быстро пухнет, соответственно в таблицах по месяцам/неделям/дням. Это не принципиальный вопрос потому что с файла в том же .csv всё импортируется в мускул одной командой. Если хотите писать в него быстро и много одновременно с совершаемыми действия на сайте - отдайте эту задачу воркеру и пишите в память (LevelDB к примеру), периодически сливая лог в базу данных на постоянное хранение.
Хороший повод применить ООП: абстрактный логер и конкретные реализации — в файл, в реляционную базу, в хранилище ключ-значение. Есть с чего начать: http://www.php-fig.org/psr/psr-3/