Є два фундаментальні досягнення структуризованого підходу, які неможливо імітувати за допомогою текстових журналів без додаткових зусиль (іноді надзвичайних рівнів).
Типи подій
Коли ви пишете дві події з log4net, як-от:
log.Debug("Disk quota {0} exceeded by user {1}", 100, "DTI-Matt");
log.Debug("Disk quota {0} exceeded by user {1}", 150, "nblumhardt");
Вони дадуть подібний текст:
Disk quota 100 exceeded by user DTI-Matt
Disk quota 150 exceeded by user nblumhardt
Але, що стосується машинної обробки, це лише два рядки різного тексту.
Ви можете знайти всі події "Дискова квота перевищена", але спрощений випадок пошуку подій like 'Disk quota%'
впаде, як тільки відбудеться інша подія, схожа на:
Disk quota 100 set for user DTI-Matt
Текстовий журнал викидає інформацію, яку ми спочатку маємо про джерело події, і це потрібно реконструювати, читаючи журнали, як правило, з більш детальними виразами відповідності.
На противагу цьому, коли ви пишете наступні два події Serilog :
log.Debug("Disk quota {Quota} exceeded by user {Username}", 100, "DTI-Matt");
log.Debug("Disk quota {Quota} exceeded by user {Username}", 150, "nblumhardt");
Вони створюють аналогічний вихід тексту до версії log4net, але поза кадром "Disk quota {Quota} exceeded by user {Username}"
шаблон повідомлення передається обома подіями.
За допомогою відповідної раковини ви зможете пізніше писати запити where MessageTemplate = 'Disk quota {Quota} exceeded by user {Username}'
і отримувати саме ті події, де квота на диск перевищена.
Не завжди зручно зберігати весь шаблон повідомлення з кожною подією журналу, тому деякі занурює хеш шаблону повідомлення в числове EventType
значення (наприклад 0x1234abcd
), або, ви можете додати збагачувач до трубопроводу журналу, щоб зробити це самостійно .
Це більш тонка, ніж наступна різниця нижче, але надзвичайно потужна при роботі з великими обсягами журналів.
Структуровані дані
Знову ж таки, враховуючи дві події щодо використання місця на диску, це може бути досить просто, використовуючи текстові журнали для запиту конкретного користувача like 'Disk quota' and like 'DTI-Matt'
.
Але діагностика виробництва не завжди є такою простою. Уявіть, що потрібно знайти події, де квота на диск перевищила 125 Мб?
З Serilog це можливо в більшості раковин, використовуючи варіант:
Quota < 125
Створення такого роду запит з регулярного виразу є можливим, але це стає нудними швидко і , як правило , закінчується час крайній захід.
Тепер додайте до цього типу події:
Quota < 125 and EventType = 0x1234abcd
Ви починаєте бачити тут, як ці можливості прямо поєднуються, щоб виробнича налагодження з журналами відчувало себе першокласною розробкою.
Ще одна перевага, можливо, не така проста для запобігання випередженням, але після того, як налагодження виробництва буде знято з краху хекерів, регулярно розробляючи журнали, вони більше уважно ставляться до уваги при їх написанні. Кращі журнали -> якісніші програми -> більше щастя навколо.