Рекомендации по созданию средства записи журналов для ошибок - PullRequest
10 голосов
/ 18 января 2010

Я недавно делал некоторую работу, которая была довольно глубокой, Мне было интересно, что вы думаете, лучше для регистрации. Это лучше.

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

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

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

Ответы [ 5 ]

5 голосов
/ 18 января 2010

Насколько мне известно, довольно часто (требуется?) Сброс потока является эквивалентом сохранения.

То есть, когда вы говорите:

file.flush();

Все, что ждет написания, написано. Обратите внимание, что std::endl; также вызывает flush. Итак, оставьте его открытым и просто сбросьте после сброса информации.

2 голосов
/ 18 января 2010

Лучшее решение - использовать для этого существующую библиотеку. Есть много хороших, хорошо протестированных и популярных библиотек. Они обычно дают вам всю необходимую гибкость и избавляют от головной боли при управлении файлами. Кроме того, они позволяют сохранять ваши журналы для различных целей и не обязательно файлы. Я использовал Google Log Library и ACE:

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

1 голос
/ 18 января 2010

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

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

Любые другие предложения ??

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

Вот статья , которая мне очень понравилась, о дизайне классов логгеров. Посмотрите.

Если вы не хотите / не имеете пропускной способности для поддержки создания нового модуля для ведения журнала, перейдите к существующей библиотеке, как уже предлагали другие.

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

Надеюсь, это поможет.

1 голос
/ 18 января 2010

Я рекомендую Журнал для C ++ (log4cpp) , в котором есть хорошие инструменты.

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

В системах Unix у вас есть что-то, называемое syslog (которое, кстати, является как библиотечным вызовом, так и openlog и closelog, а также сервисом). В Windows я считаю, что есть журнал событий, хотя я не знаю API для этого.

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

Теперь, как говорится, сбой СИСТЕМЫ (сбой питания или что-то в этом роде) - это совсем другая история, хотя я не знаю, является ли это вашей проблемой, если вы захотите немного рассказать о том, какая система вы работаете, может быть, проще предложить что-то более подходящее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...