За последние 24 часа нас посетили 17290 программистов и 2080 роботов. Сейчас ищут 1207 программистов ...

Логи

Тема в разделе "PHP для новичков", создана пользователем ??? Соловьев Е ш326, 5 мар 2015.

  1. Доброго времени суток дорогие форумчане.

    Вопрос собственно в том, каким образом лучше хранить логи активных действий пользователей (такие как удаление или изменение сообщений, изменение профиля и прочее).
    Рационально ли использовать для этого таблицу в БД, записывая каждый параметр (действие, время, 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.
    Но все же хочется узреть мнение профессионалов и опытных прогеров =)

    С уважением Евгений.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    контроль версий базы данных
     
  3. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Всё зависит от того как часто вы лазите в лог, потребуется ли вам джоинить связанные записи в других таблицах и базах или нет и от того как часто вы собираетесь восстанавливаться с лога.
    Обычно логи хранятся в текстовых файлах а не файлах реляционных таблиц.
    Если описанные выше действия у вас производятся часто, то храните в таблице. Если лог быстро пухнет, соответственно в таблицах по месяцам/неделям/дням.
    Это не принципиальный вопрос потому что с файла в том же .csv всё импортируется в мускул одной командой.
    Если хотите писать в него быстро и много одновременно с совершаемыми действия на сайте - отдайте эту задачу воркеру и пишите в память (LevelDB к примеру), периодически сливая лог в базу данных на постоянное хранение.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.249
    Адрес:
    там-сям
    Хороший повод применить ООП: абстрактный логер и конкретные реализации — в файл, в реляционную базу, в хранилище ключ-значение.
    Есть с чего начать: http://www.php-fig.org/psr/psr-3/