Наблюдаемость позволяет нам понять систему снаружи, позволяя нам задавать вопросы об этой системе, не зная ее внутреннего устройства. Более того, это позволяет нам легко устранять и решать новые проблемы (т. е. «неизвестные неизвестные») и помогает нам ответить на вопрос: «Почему это происходит?»

Untitled

Чтобы иметь возможность задавать такие вопросы системе, приложение должно быть правильно оснащено. То есть код приложения должен выдавать такие сигналы , как трассировки , метрики и логи . Приложение правильно оснащено, когда разработчикам не нужно добавлять дополнительные инструменты для устранения проблемы, поскольку у них есть вся необходимая информация.

Журналирование обеспечивает наглядное представление поведения работающего приложения. Журнал – это поток агрегированных, упорядоченных по времени событий, собранных из потоков вывода всех запущенных процессов и вспомогательных сервисов. Журнал в своём сыром виде обычно представлен текстовым форматом с одним событием на строчку (хотя трассировки исключений могут занимать несколько строк). Журнал не имеет фиксированного начала и конца, поток сообщений непрерывен, пока работает приложение.

Приложение двенадцати факторов никогда не занимается маршрутизацией и хранением своего потока вывода. Приложение не должно записывать журнал в файл и управлять файлами журналов. Вместо этого каждый выполняющийся процесс записывает свой поток событий без буферизации в стандартный вывод stdout. При рабочем развёртывании поток вывода каждого процесса будет захвачен средой выполнения, собран вместе со всеми другими потоками вывода приложения и перенаправлен к одному или нескольким конечным пунктам назначения для просмотра и долгосрочной архивации. Эти конечные пункты архивации не являются видимыми для приложения и настраиваемыми приложением, вместо этого они полностью управляются средой выполнения.

Нет определенного стандарта RFC, который бы описывал уровни логирования. Но часто используют 6 уровней, и их можно причислить к общепринятым стандартам, так же они описаны в стандарты https://opentelemetry.io/docs/specs/otel/logs/data-model/#field-severitynumber

В общем, уровни(severity) логирования включают:

SeverityNumber Name Meaning
1-4 TRACE A fine-grained debugging event. Typically disabled in default configurations.
5-8 DEBUG A debugging event.
9-12 INFO An informational event. Indicates that an event happened.
13-16 WARN A warning event. Not an error but is likely more important than an informational event.
17-20 ERROR An error event. Something went wrong.
21-24 FATAL A fatal error such as application or system crash.

Property

плоский список свойств, обязательно динамической длины

Untitled

Untitled

Enrich, Scope

logger.LogDebug($"PersonId={personId} params={params} process");
  // Code to process item...
logger.LogDebug($"PersonId={personId} result={result}");