Базовый ответ
Вместо того, чтобы делать это самостоятельно, с нуля, посмотрите, как это делают некоторые существующие системы, и, если позволяет их лицензия, используйте их дизайн и код (убедитесь, что вы документировали, какой код вы использовали, и добавьте уведомление об авторских правах в свой CMS где-то).
Возможно, полезный пример
Я не уверен насчет PHP CMS, которые делают это, но я знаю, что Администратор Django делает это. Django реализован на Python, но перенести этот код на PHP должно быть довольно просто. Даже если код не является прямым портом, дизайн может быть перенесен.
Файл, содержащий журналирование, находится в модуле admin
в models.py .
Некоторые ключевые аспекты:
Модель данных для таблицы регистрации:
class LogEntry(models.Model):
action_time = models.DateTimeField(_('action time'), auto_now=True)
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType, blank=True, null=True)
object_id = models.TextField(_('object id'), blank=True, null=True)
object_repr = models.CharField(_('object repr'), max_length=200)
action_flag = models.PositiveSmallIntegerField(_('action flag'))
change_message = models.TextField(_('change message'), blank=True)
objects = LogEntryManager()
И LogEntryManager, который сохраняет фактические записи журнала:
class LogEntryManager(models.Manager):
def log_action(self, user_id, content_type_id, object_id, object_repr, action_flag, change_message=''):
e = self.model(None, None, user_id, content_type_id, smart_unicode(object_id), object_repr[:200], action_flag, change_message)
e.save()
HTH, удачи!