На самом деле существуют разные виды журналов доступа. Наиболее распространенные из них предназначены для доступа к вашей странице и могут иметь формат, описанный сэром Дарием (обычно это называется access log
).
Затем также ведется регистрация внутренних действий (обычно это называется application log
). Многие из них будут иметь низкий уровень ведения журнала (это означает, что вы обычно их не видите, но имеете возможность временно их включать).
Если вы не примете меры предосторожности, вы получите журнал вроде:
- Запрос XYZ выполнен за 2 мс
- Запрос ABC выполнен за 1мс
- Стартовая транзакция
- Заказ отправить
- Стартовая транзакция
- Заказ удален
- Запрос ABC выполняется за 1мс
При исследовании производственной проблемы это часто не очень полезно. Любая другая строка может принадлежать одному и тому же пользователю или разным пользователям. Вы не знаете.
Мне было легко иметь формат, подобный следующему для каждой такой строки журнала:
- Время
- IP-адрес
- ID сеанса
- ID пользователя
- ID / имя темы
- Идентификатор последовательности
Идентификатор или имя потока важны, чтобы вы могли различить ситуацию, когда один и тот же пользователь делает несколько запросов к вашему приложению одновременно.
Идентификатор последовательности - это счетчик, который внутренне подсчитывает каждый запрос, который пользователь делает с начала своего сеанса (в Java для этого я использовал AtomicInteger). Идентификатор последовательности удобен, так как это более простой способ поиска при рассмотрении всего, что имело место во время определенного запроса, поскольку идентификаторы потоков, конечно, повторно используются при обслуживании совершенно разных запросов. Это также удобно, когда вы обрабатываете один запрос внутренне, используя несколько потоков.
С небольшими усилиями, подобный формат журнала позволяет вам извлекать действия одного пользователя из вашего журнала и увеличивать отдельные запросы.