Рекомендации по ведению журнала
Журналы событий хранят записи значимых событий от имени системы и приложений, работающих в системе. Так как функции ведения журнала являются общими целями, необходимо решить, какие сведения соответствуют журналу. Как правило, следует регистрировать только сведения, которые могут быть полезны при диагностике проблемы с оборудованием или программным обеспечением. Ведение журнала событий не предназначено для использования в качестве средства трассировки.
Выбор событий для регистрации
Ниже приведены примеры случаев, в которых ведение журнала событий может оказаться полезным:
- Проблемы с ресурсами. Ведение журнала события предупреждения при сбое выделения памяти может помочь указать причину низкой памяти.
- Проблемы с оборудованием. Если драйвер устройства обнаруживает время ожидания контроллера диска, сбой питания в параллельном порту или ошибку данных из сети или последовательной карточки, драйвер устройства может записывать сведения об этих событиях, чтобы помочь системе администратора диагностировать проблемы оборудования.
- Плохие секторы. Если драйвер диска сталкивается с плохим сектором, он может иметь возможность считывать или записывать данные в сектор после повтора операции, но сектор будет плохо в конечном итоге. Если драйвер диска может продолжить работу, он должен записать событие предупреждения; в противном случае он должен регистрировать событие ошибки. Если драйвер файловой системы находит большое количество плохих секторов и исправляет их, события предупреждения журнала могут помочь администратору определить, что диск может завершиться ошибкой.
- Информационные события. Серверное приложение (например, сервер базы данных) записывает вход пользователя, открытие базы данных или запуск передачи файлов. Сервер также может записывать другие события, такие как ошибки (не удается получить доступ к файлу, процессу узла отключен и т. д.), повреждение базы данных или успешное перемещение файлов.
Создание сообщений
Сообщения должны иметь смысл администраторам и пользователям, которые пытаются устранить проблему. Сообщение должно содержать все необходимые сведения, чтобы понять, что вызвало проблему и как ее исправить.
Избегайте написания криптографического сообщения, например "Пакет драйвера, полученный из подсистемы ввода-вывода, был недопустим. Данные — это пакет". Лучшее сообщение указывает на правильное функционирование драйвера, но ведение журнала неправильно отформатированных пакетов. Он может продолжать говорить о том, что версия драйвера Юникода необходима для исправления проблемы. Дополнительные сведения о написании хороших сообщений об ошибках см. в руководстве по сообщению об ошибках.
Не используйте вкладки или запятые в тексте сообщения, так как журналы событий можно сохранить в виде текстовых файлов с запятыми или табуляции. Многие организации импортируют эти файлы в базы данных, а для дополнительных символов форматирования потребуется ручное управление.
При использовании имен UNC или других ссылок, содержащих пробелы, заключите имя в угловые скобки. Например, \\sharename servername\.>< Вы можете написать URL-адрес в конце сообщения, которое указывает пользователю на связанный материал справки. URL-адрес должен быть полным dns-именем узла. Например, можно добавить следующий текст в сообщения: "Дополнительные сведения об этом сообщении см. на нашем сайте поддержки. https://www.microsoft.com/Support/ProdRedirect/ContentSearch.asp
Ссылка приведет к странице ASP, которая перенаправляет пользователя на содержимое, связанное с сообщением об ошибке. Он анализирует дополнительные параметры (передаваемые при щелчке URL-адреса), чтобы определить, где перенаправлять пользователя.
Аргументы, переданные функции ReportEvent , добавляются к URL-адресу следующим образом:
strHTTPQuery += L"?EvtSrc=" + _strEscapedSource;
strHTTPQuery += L"&EvtCat=" + _strEscapedCategory;
strHTTPQuery += L"&EvtID=" + _strEscapedEventID;
strHTTPQuery += L"&EvtCatID=" + _strEscapedCategoryID;
strHTTPQuery += L"&EvtType=" + _strEscapedType;
strHTTPQuery += L"&EvtTypeID=" + _strEscapedTypeID;
strHTTPQuery += L"&EvtRptTime=" + _strEscapedDateAndTime;
strHTTPQuery += L"&EvtTZBias=" + _strEscapedTimeZoneBias;
Если имя компании, имя продукта, версия продукта, имя файла и версия файла из заголовка DLL сообщения для источника событий допустимы, они также добавляются в URL-адрес:
ADD_VER_STR(L"CoName", _strEscapedCompanyName);
ADD_VER_STR(L"ProdName", _strEscapedProductName);
ADD_VER_STR(L"ProdVer", _strEscapedProductVersion);
ADD_VER_STR(L"FileName", _strEscapedFileName);
ADD_VER_STR(L"FileVer", _strEscapedFileVersion);
Сокращение затрат
Ведение журнала событий использует ресурсы, такие как дисковое пространство и время процессора. Объем дискового пространства, необходимого для журнала событий, и накладные расходы для приложения, которое регистрирует события, зависит от количества сведений, которые вы выбираете для записи. Поэтому важно регистрировать только важную информацию. Кроме того, рекомендуется поместить вызовы журнала событий в путь ошибки в коде, а не в основном пути кода, что приведет к снижению производительности.
Объем места на диске, необходимого для каждой записи журнала событий, включает элементы структуры EVENTLOGRECORD . Это структура переменной длины; строки и двоичные данные хранятся в соответствии со структурой.