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

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

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

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

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

Спасибо


person Boris Guéry    schedule 23.04.2009    source источник
comment
Как бы то ни было, журналы обычно не предназначены для чтения пользователями, поэтому большинство людей стараются сделать их информативными, а не дружелюбными ...   -  person David Z    schedule 23.04.2009
comment
@ Дэвид: Что? Большинство журналов читаются администраторами - классом пользователей. Не уверен, о чем ты говоришь. Дружественный к администратору обычно означает полный - отметка даты, идентификатор сеанса, имя модуля, уровень серьезности, сообщение, которое умещается в одной строке и т. Д.   -  person S.Lott    schedule 23.04.2009
comment
дружелюбный означает, что формат журнала будет легко анализировать, читать и предлагать возможность любому пользователю (например, текущему пользователю или администратору) иметь возможность с помощью большинства инструментов иметь соответствующую информацию о приложении.   -  person Boris Guéry    schedule 23.04.2009


Ответы (7)


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

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

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

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

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

person Brian R. Bondy    schedule 23.04.2009
comment
Я принял этот ответ, потому что он отвечает на мои ожидания, даже если ссылка, предоставленная S.Lott, была полезной. Спасибо - person Boris Guéry; 23.04.2009

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

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


Изменить

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

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

person S.Lott    schedule 23.04.2009

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

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

person Stefano Borini    schedule 23.04.2009

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

person sybreon    schedule 23.04.2009

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

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

person Dima    schedule 23.04.2009

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

person Denis Barmenkov    schedule 11.01.2010

timeStamp, то есть DateTime ГГГГ / ММ / ДД: ЧЧ: мм: сс: мс Идентификатор потока пользователя Название функции Сообщение / Сообщение об ошибке / Сообщение об успешном завершении / Отслеживание функции

Имейте это в формате 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>
person S M Kamran    schedule 23.04.2009
comment
Некоторые люди думают, что XML - это ответ на все вопросы (как и некоторые элементы регулярных выражений), но я не согласен. Анализировать файл журнала фиксированного формата с помощью обычных инструментов обработки текста так же легко (возможно, проще), чем XML-файл. И вы не закончите тем, что весь этот шум в файле займет бесполезное место. - person paxdiablo; 23.04.2009
comment
Некоторые люди думают, что их мысли решают, что правильно, а что нет. Можно не согласиться, но это ничего не доказывает. И, кстати, некоторые люди здесь, чтобы навязать им свой авторитет, я предлагаю, чтобы нам пора научиться уважать и уступать место другим. Некоторое время решение может быть не так важно, как участие. - person S M Kamran; 23.04.2009
comment
Я должен признать, что мне не очень нравится XML, это личное мнение, и я благодарю вас за предложение, но мне удобнее работать с простым текстовым файлом, чем с беспорядочными файлами xml, при этом я согласен в некоторых случаях это полезно, особенно в веб-приложениях. - person Boris Guéry; 23.04.2009