Что записать в файл журнала? - PullRequest
11 голосов
/ 23 апреля 2009

Мой вопрос прост: что писать в журнал. Есть ли какие-либо соглашения? Что я должен вставить?

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

У меня уже есть некоторые идеи, такие как отметка времени, уникальный идентификатор для каждой функции / метода и т. Д. Я хотел бы иметь несколько уровней журнала, таких как трассировка / отладка, информация, ошибки / предупреждения.

Используете ли вы предварительно отформатированные ресурсы журнала?

Спасибо

Ответы [ 7 ]

18 голосов
/ 23 апреля 2009

Это довольно приятно и уже реализовано.

Читать это: http://docs.python.org/library/logging.html


Редактировать

«легко разбирать, читать» - это, как правило, противоречивые характеристики. Английский - легко читаемый, трудно разобрать. XML - легко разбирать, трудно читать. Не существует такого формата, который бы легко читался и анализировался. Некоторые форматы журналов «не ужасны для чтения и не могут быть проанализированы».

Некоторые люди создают несколько обработчиков, чтобы один журнал имел несколько форматов: сводку для людей, которую нужно прочитать, и версию XML для автоматического анализа.

9 голосов
/ 23 апреля 2009

Вот несколько предложений по содержанию:

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

Лучшие практики для реализации:

  • Поместите мьютекс вокруг метода записи, чтобы вы могли быть уверены, что каждая запись является поточно-ориентированной и имеет смысл.
  • Отправляйте по 1 сообщению за раз в файл журнала и каждый раз указывайте тип сообщения журнала. Затем вы можете указать, какой тип записи вы хотите использовать при запуске программы.
  • Не использовать буферизацию для файла или часто сбрасывать в случае сбоя программы.

Редактировать: Я только что заметил, что вопрос был помечен Python, поэтому, пожалуйста, посмотрите ответ С. Лотта перед моим. Это может быть достаточно для ваших нужд.

1 голос
/ 23 апреля 2009

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

Проверьте log4py - портированная на Python версия log4j, я думаю, что есть несколько реализаций для Python ..

1 голос
/ 23 апреля 2009

Хорошая идея - взглянуть на программное обеспечение для анализа логов. Если вы не планируете писать свои собственные, вы, вероятно, захотите использовать существующий пакет анализа журналов, такой как Analog. В этом случае вы, вероятно, захотите сгенерировать вывод журнала, достаточно похожий на те форматы, которые он принимает. Это позволит вам создавать красивые графики и графики с минимальными усилиями!

1 голос
/ 23 апреля 2009

Поскольку вы пометили свой вопрос python, я отсылаю вас также к этому вопросу . Что касается содержания, предложение Брайана это хорошо. Однако не забудьте добавить имя программы, если вы используете общий журнал.

Важной вещью в лог-файле является "возможность использования". Попытайтесь предоставить всю вашу информацию в одной строке с правильными строковыми идентификаторами, которые являются уникальными (также в основах) для определенного условия. Что касается отметки времени, используйте стандарт ISO-8601, который хорошо сортирует.

0 голосов
/ 11 января 2010

Библиотека журналов Python является поточно-ориентированной для потоков одного процесса.

0 голосов
/ 23 апреля 2009

метка времени, то есть DateTime ГГГГ / ММ / ДД: ЧЧ: мм: сс: мс пользователь ID потока Имя функции Сообщение / Сообщение об ошибке / Успешное сообщение / Функция Trace

Имейте это в формате XML, и вы можете легко написать для него парсер.

<log>
  <logEntry DebugLevel="0|1|2|3|4|5....">
    <TimeStamp format="YYYY/MM/DD:HH:mm:ss:ms" value="2009/04/22:14:12:33:120" />
    <ThreadId value="" />
    <FunctionName value="" />
    <Message type="Error|Success|Failure|Status|Trace">
      Your message goes here
    </Message> 
  </logEntry>
</log>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...