Какова хорошая структура стандартного файла журнала ошибок?

StackOverflow https://stackoverflow.com/questions/2115383

Вопрос

Я пытаюсь создать файл журнала ошибок и предупреждений для своей настольной программы.

Когда моя программа читает входной файл пользователя, она может обнаружить синтаксические ошибки или какие-либо недопустимые данные.Когда все прочитано и программа обработает данные, могут возникнуть новые проблемы.

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

Это будет файл, который пользователь захочет просмотреть, поэтому очевидно, что он должен быть хорошо структурирован и прост в использовании.

Знаете ли вы какие-либо руководства по стилю для этого или видели файл журнала ошибок, который заставил вас задуматься:«Вот это хорошо продуманный файл журнала!»


Следовать за:

Первые три ответа на самом деле более применимы для сервера или журнала событий.

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

Я уверен, что вы использовали некоторые настольные приложения, которые создают такие файлы журналов.Вы видели какие-нибудь хорошие?

Это было полезно?

Решение

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

Для Windows это почти всегда журнал событий приложений, который мне не так нравится, как текстовый файл, но это правильный путь.Я видел несколько приложений, которые записывают текстовые файлы в свой программный каталог или что-то в этом роде, но это всегда специально, а не стандартно.Например, McAfee VirusScan регистрирует файлы в папке C:\Documents and Settings\All Users\Application Data\McAfee\DesktopProtection.На моей машине есть множество журналов установки в C:\Documents and Settings\username\Local Settings emp*.log и C:\WINDOWS emp*.log.Но опять же, они все разные, специальные и не очень хорошо продуманные.

Другие советы

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

Важная информация часто опускается;иногда даже информацию о дате и времени.Я бы рекомендовал сделать их легко анализируемыми;Я бы использовал обозначение ISO 8601, например «2010-01-22T10:23:21-08:00» (включая часовой пояс, примечание).Я бы включил идентификатор процесса (и потока);Я бы рассмотрел возможность включения имени программы, аргументов (например, имени файла);Я бы также включил идентификатор пользователя в той или иной форме.Некоторые из них могут потребоваться только один раз за выполнение, но другие биты могут потребоваться для каждого сообщения.Частично это зависит от того, является ли файл журнала уникальным для каждого запуска или общим для всех запусков, а также от того, может ли один файл использоваться более чем одним пользователем/процессом.

Затем вам нужно решить, как вы собираетесь идентифицировать содержимое сообщения и конец содержимого сообщения.Особенно для машинного анализа (но также и для человеческого анализа) полезно, если контент однозначно отформатирован и можно определить конец.Возможно, вам придется экранировать содержимое (этот шаг чаще всего отменяется, поэтому, если сообщение об ошибке связано с неправильно сформированным сообщением об ошибке, действительно сложно определить, какие данные содержатся в файле, а какое новое сообщение об ошибке в данных). в файле).В многопоточной программе или там, где файл журнала может использоваться совместно несколькими процессами, вам также необходимо учитывать, как записи будут буферизоваться, особенно если вам приходится иметь дело с длинными строками.Вы хотите, чтобы каждое сообщение было отдельно в файле журнала.Это не обязательно тривиально — возможно, вам даже придется иметь дело с протоколом блокировки, чтобы обеспечить контролируемый доступ.

Подумайте, нужен ли вам красивый принтер для журнала.

Подумайте, поможет ли формат на основе XML (с начальными и конечными тегами).Я не большой поклонник XML, но у него есть некоторые преимущества для машинной обработки.

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

Date;Time;Severity;TID;Module;This;Source;Message
2010/01/21;08:47:05:205;DEBUG;4936;MAIN;0x00000000;DllMain@36;DLL_PROCESS_ATTACH
2010/01/21;08:47:05:205;DEBUG;4936;MAIN;0x00000000;DllMain@40;DLL_PROCESS_DETACH

Я не уверен, соответствует ли это вашим потребностям, но думаю, что вы уловили основную идею.Удачи!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top