Что записать в файл журнала?

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

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

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

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

Спасибо

Ответ 1

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

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

Рекомендации по внедрению:

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

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

Ответ 2

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

Прочтите это: http://docs.python.org/library/logging.html


Edit

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

timeStamp i.e DateTime YYYY/MM/DD: HH: mm: ss: ms пользователь ИД Имя функции Сообщение об ошибке/сообщение об успешном сообщении/функция

Имейте это в формате 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>

Ответ 7

Библиотека протоколов Python является потокобезопасной для отдельных потоков процессов.