Вариант 1: используйте одну из баз данных NoSQL, например MongoDB - я не знаком с ними, так как живу в основном в мире SQL Server. Это позволяет вам иметь записи, которые являются документами, а не статическим числом столбцов, как у реляционных БД
Вариант 2: реляционная БД
Таблица: Журнал {Id (PK), Дата, Время, Уровень, Сообщение}
Таблица: ExtraFields {Id (PK), FieldName}
Таблица: дополнительные поля {FieldId (PK), LogId (PK), значение}
Здесь каждая запись получит запись журнала, а затем ряд дополнительных полей в AdditionalFields, которые ссылаются на LogId. Затем вы можете загрузить их в объект журнала. Таблица ExtraFields будет иметь все типы полей. Если при загрузке записи ее не существует, добавьте еще одну. Так что это может быть URL, IP, User-Agent и т. Д., Если это веб-журналы.
В качестве альтернативы вы можете избежать таблицы ExtraFields и просто поместить имя поля непосредственно в таблицу AdditionalFields.